2012-06-11 84 views
3

我在Centos 4上,在我的C++程序中使用kill(pid,0)来检查目前是否有一个正在运行的给定pid的进程。我开始怀疑有一种竞争条件,即一个进程开始后不久,有一个小窗口,即使实际上有一个进程正在运行,kill(pid,0)也不会返回零。是否kill(pid,0)保证在进程存在时返回0?

这是一个已知的问题?当pid实际存在但刚刚启动时,kill()会返回非零值吗?如果kill()不是一个可靠的测试存在,有没有更好的方法来执行此测试?

回答

0

kill(pid, 0)只会返回0,如果进程存在,您将能够发送一个信号。如果进程没有按照您的方式运行(并且您不是root用户),那么调用将会失败并显示-EPERM。

+0

如果没有这样的PID,它也返回ESRCH。 –

相关问题