如何检测另一个守护进程是否终止

时间:2018-02-03 15:11:56

标签: c linux process

我想开发一个监控另一个守护进程的守护进程。如果其他守护进程由于任何原因而崩溃或停止,那么我的守护进程将重新启动它。

如何检测是否在C中停止了另一个(非子进程)?

1 个答案:

答案 0 :(得分:3)

如果另一个进程已终止,检测的唯一方法是它是否是您的主管的子进程。在这种情况下,您可以调用waitwaitpid或安排在流程退出时处理SIGCHLD信号。

从根本上说,像upstartsystemdrunit甚至遗留init这样的处理器主管如何运作。

还有其他的工作方式,但它们最终是脆弱的,容易出问题。例如,如果您知道正在运行的进程的PID,则可以使用kill(pid, 0)定期发信号(错误表示给定的pid不再运行)...但此解决方案存在两个问题:PID可以被回收,所以如果相同的PID仍然有效,则无法保证它实际上是您感兴趣的过程。此外,这需要定期轮询正在运行的进程,而调用waitwaitpid可能是一个阻塞操作,从而产生更简单的代码。

同样,您可以在/proc中检查正在运行的进程列表,但这与前一个解决方案存在的问题几乎相同。

相关问题