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

时间:2014-10-15 11:55:23

标签: c linux system-calls

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

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

3 个答案:

答案 0 :(得分:8)

waitpid()函数可以使选项值WNOHANG不阻止。请一如既往地查看the manual page

那就是说,我不确定系统是否保证不会回收pid,这会在竞争条件下打开它。

答案 1 :(得分:2)

kill(pid, 0);

如果PID存在,这将“成功”(返回0)。当然,它可能存在,因为原始过程结束了,新的东西取而代之......由你来决定是否重要。

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

答案 2 :(得分:1)

使用WNOHANG中的waitpid()选项。