我想开发一个监控另一个守护进程的守护进程。如果其他守护进程由于任何原因而崩溃或停止,那么我的守护进程将重新启动它。
如何检测是否在C中停止了另一个(非子进程)?
答案 0 :(得分:3)
如果另一个进程已终止,检测的唯一方法是它是否是您的主管的子进程。在这种情况下,您可以调用wait
或waitpid
或安排在流程退出时处理SIGCHLD
信号。
从根本上说,像upstart
或systemd
或runit
甚至遗留init
这样的处理器主管如何运作。
还有其他类的工作方式,但它们最终是脆弱的,容易出问题。例如,如果您知道正在运行的进程的PID,则可以使用kill(pid, 0)
定期发信号(错误表示给定的pid不再运行)...但此解决方案存在两个问题:PID可以被回收,所以如果相同的PID仍然有效,则无法保证它实际上是您感兴趣的过程。此外,这需要定期轮询正在运行的进程,而调用wait
或waitpid
可能是一个阻塞操作,从而产生更简单的代码。
同样,您可以在/proc
中检查正在运行的进程列表,但这与前一个解决方案存在的问题几乎相同。