我有分叉过程的pid。现在,从我的c代码(在Linux上运行),我必须定期检查此进程是否仍在运行或终止。我不想使用wait()
或waitpid()
等阻止调用。需要(最好)一个非阻塞系统调用,只检查这个pid是否仍在运行并返回子状态。
最好和最简单的方法是什么?
答案 0 :(得分:8)
waitpid()
函数可以使选项值WNOHANG
不阻止。请一如既往地查看the manual page。
那就是说,我不确定系统是否保证不会回收pid,这会在竞争条件下打开它。
答案 1 :(得分:2)
kill(pid, 0);
如果PID存在,这将“成功”(返回0)。当然,它可能存在,因为原始过程结束了,新的东西取而代之......由你来决定是否重要。
您可以考虑为SIGCHLD
注册处理程序。这不取决于可以回收的PID。
答案 2 :(得分:1)
使用WNOHANG
中的waitpid()
选项。