如何监控过程寿命

时间:2011-01-27 19:08:35

标签: c++ linux process

我有一个问题,我有一个控制可执行文件,监视几个进程,如果有人死了,那么它将重新启动它。在Windows上我们正在使用WaitFOrMultipleObject,其中进程句柄在句柄数组中传递。如果任何进程死掉,我们会被WaitForMultipleObject确认。

现在我们必须在Linux上实现它。我们将如何做到这一点?等待仅适用于一个进程ID,而我们必须监视多个进程。

2 个答案:

答案 0 :(得分:1)

听起来像是在寻找process groups。对于使用-pidgroup的进程组(即pid组的负值),您可以waitpid(2)作为调用中pid的值,或-1等待任何子进程。< / p>

答案 1 :(得分:1)

这是Unix崩溃的地方之一 - 它确实应该有一个进程的文件描述符的概念,可以传递给select(这是与{{1}相当的Unix }});但事实并非如此。

您要做的是为WaitForMultipleObjects安装处理程序。在该处理程序中,您可以在循环中调用SIGCHLDwait4(以更方便;但不要尝试使用普通waitpid,您需要使用options参数),设置{ {1}}标志,直到它返回0.对于每个子节点,将其PID和退出状态打包到结构中并将该结构写入管道。从主事件循环中的管道读取,拉出结构并采取适当的措施。除了你的程序没有别的事情要做之外,不要试图从信号处理程序中重新生成子项(或分配内存,或者除了调用waitWNOHANG之外任何)。 “主循环”包括在无限循环中调用waitpid