【问题标题】:Is kill(pid, 0) guaranteed to return 0 if a process exists?如果进程存在,kill(pid, 0) 是否保证返回 0?
【发布时间】:2012-06-13 23:59:11
【问题描述】:

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

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

【问题讨论】:

    标签: c++ centos race-condition pid


    【解决方案1】:

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

    【讨论】:

    • 如果没有这样的pid,它也会返回ESRCH。
    • 如果您以 root 身份运行,这是不可靠的。因为它只会以 -EPERM 指示权限被拒绝而失败。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 2015-01-18
    相关资源
    最近更新 更多