毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> linux >> 正文

不知道进程的pid,如何向它发送一个信号

更新时间:2012-9-16:  来源:毕业论文

参考书上都是这个方式给PID进程发信号,
kill(PID, SIGUSR1);

1)但是在系统运行中,如何获取这个pid(肯定不能手动敲ps吧?)
2)或者有没有其他的方法使得进程A向进程B发送SIGUSR1?


方法一
FILE *popen(const char *command, const char *type);
command字符串写ps -C PROCESS_NAME ,,,
然后解析下从FILE中读的字符就行了。

方法二
当然也可以用fork + pipe + execl + ps的方法重定向终端输出1
然后read pipe,解析字符串。得到pid.

方法三
system函数调用shell脚本 。这个简单,因为脚本解决字符方便。

方法四
参考ps的实现方法。 (这个我没看过ps源码,我猜应该是读取/proc中的文件和文件夹得到的,参见man 5 proc)
/proc目录下面的数字文件夹就表示每个进程的PID,,
/proc/$PID目录下cmdline文件存的就是他的参数,,文件里第一个参数就是指他的进程名了!
所以你只要写个函数然后遍历/proc/数字目录下的cmdline文件,读取第一个字符串,然后用basename函数取其进程名,,比较是否目标进程名,,若是则其对应的所在目录数字为其PID,,这样就可以调用kill了。

1,父子进程fork获得
2,无亲缘进程,预先约定写Pid文件
3,system执行killall, 其他类似方法都一样道理, 调shell即可
 
其实主要看你想发信号的进程是否是协作进程,即你是否能改变其源码或者你是否能让你的进程fork后exec产生。这种情况进程PID怎么都能获取了。
如果不是协作进程,,那你就只能通过各种方法根据进程名获取PID了。

自己写代码实现ps的功能,
遍历/proc下所有的文件,然后查询/proc/pid/comm 便知进程名, 如果匹配,则pid为进程pid

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。