Linux:等待PID死机

时间:2017-05-31 12:02:02

标签: c++ linux process pid epoll

我有一个带有中央事件机制的程序,它使用select,epoll或kevent(平台依赖,OSX,Linux和FreeBSD)。

现在我遇到了一个需要等待进程完成执行的问题。我从这个过程得到的只是它的PID。有没有办法等待上述机制让PID完成?

我目前的想法是为PID创建一个管道,并使用kill和信号0来轮询PID,以检查它是否存活。如果没有,写一个字节到管道唤醒轮询机制。但我不喜欢这个问题需要一个额外的线程。

谢谢你的每一个答案!

2 个答案:

答案 0 :(得分:1)

我建议您在执行结束时使用waitpid。您可以在程序结束时等待多个pid。只需将您的pid存储在pid_t *中并等待所有这些(逐个)。你的主要过程将等待他所有的孩子,所以你不会有任何僵尸

答案 1 :(得分:0)

为SIGCHLD注册一个处理程序(空的,只需要信号中断你对select()的调用或者你正常等待的其他任何函数),然后检查等待函数是否返回EINTR。如果是这样 - 它被信号打断了;通过WNOHANG调用wait4()来检查孩子的状态。