如何检查分叉进程是否仍在从c程序运行

Sid*_*osh 4 c linux system-calls

我有分叉过程的pid.现在,从我的c代码(在Linux上运行),我必须定期检查此进程是否仍在运行或终止.我不想像wait()或那样使用阻塞调用waitpid().需要(最好)一个非阻塞系统调用,它只检查这个pid是否仍在运行并返回子状态.

什么是最好和最简单的方法呢?

unw*_*ind 9

waitpid()函数可以使选项值WNOHANG不阻止.一如既往地参见手册页.

也就是说,我不确定系统是否可以保证不再回收pid,因此可以在竞争条件下打开它.

  • `waitpid`只适用于调用它的进程的子进程.并且他们的pid在等待之前不会被回收,所以这是检查您的子进程是否已经终止的正确方法. (5认同)

Joh*_*nck 5

kill(pid, 0);
Run Code Online (Sandbox Code Playgroud)

如果 PID 存在,这将“成功”(返回 0)。当然,它可能存在,因为原始过程结束并取而代之的是新事物……这取决于您是否重要。

您可能会考虑为 注册一个处理程序SIGCHLD。这将不取决于可以回收的 PID。

  • 如果进程终止/退出并且某些其他进程以相同的 pid 启动,这也将成功。这是一种非常糟糕的做法,不应鼓励。 (3认同)