1.9. 给定一个进程号,我怎样知道它是个正在运行的程序?

使用‘kill()’函数,而已0作为信号代码(signal number)。

从这个函数返回有四种可能的结果:

‘kill()’返回0

这意味着一个给定此进程号的进程退出,系统允许你向它发送信号。该进 程是否可以是僵死进程与不同系统有关。

‘kill()’返回-1,‘errno == ESRCH’

要么不存在给定进程号的进程,要么增强的安全机制导致系统否认它的存 在。(在一些系统上,这个进程有可能是僵死进程。)

‘kill()’返回-1,‘errno == EPERM’

系统不允许你杀死(kill)这个特定进程。这意味着要么进程存在(它又可能是 僵死进程),要么严格的增强安全机制起作用(比如你的进程不允许发送信号 给*任何人*)。

‘kill()’返回-1,伴以其它‘errno’值

你有麻烦了!

用的最多的技巧是认为调用“成功”或伴以‘EPERM’的“失败”意味着进程存 在,而其它错误意味着它不存在。

如果你特别为提供‘/proc’文件系统的系统(或所有类似系统)写程序,一个替换 方法存在:检查‘proc/进程号’是否存在是可行的。