如果存在进程,是否保证 kill(pid, 0) 返回 0

Is kill(pid, 0) guaranteed to return 0 if a process exists?

本文关键字:pid 返回 kill 存在 进程 是否 如果      更新时间:2023-10-16

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

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

kill(pid, 0) 只有在进程存在并且您可以向其发送信号时才会返回 0。如果进程未以您的身份运行(并且您不是 root),则调用将失败并显示 -EPERM。