我有一个带有中央事件机制的程序,它使用select,epoll或kevent(平台依赖,OSX,Linux和FreeBSD)。
现在我遇到了一个需要等待进程完成执行的问题。我从这个过程得到的只是它的PID。有没有办法等待上述机制让PID完成?
我目前的想法是为PID创建一个管道,并使用kill
和信号0来轮询PID,以检查它是否存活。如果没有,写一个字节到管道唤醒轮询机制。但我不喜欢这个问题需要一个额外的线程。
谢谢你的每一个答案!
答案 0 :(得分:1)
我建议您在执行结束时使用waitpid
。您可以在程序结束时等待多个pid。只需将您的pid存储在pid_t *
中并等待所有这些(逐个)。你的主要过程将等待他所有的孩子,所以你不会有任何僵尸
答案 1 :(得分:0)
为SIGCHLD注册一个处理程序(空的,只需要信号中断你对select()的调用或者你正常等待的其他任何函数),然后检查等待函数是否返回EINTR。如果是这样 - 它被信号打断了;通过WNOHANG调用wait4()来检查孩子的状态。