C 如何检测另一个守护进程是否终止
我想开发一个守护进程来监督另一个守护进程。如果另一个守护进程由于任何原因崩溃或停止,那么我的守护进程将重新启动它 如何在C中检测另一个进程(不是子进程)是否已停止?检测另一个进程是否已终止的唯一方法是它是否是主管的子进程。在这种情况下,您可以在进程退出时调用C 如何检测另一个守护进程是否终止,c,linux,process,C,Linux,Process,我想开发一个守护进程来监督另一个守护进程。如果另一个守护进程由于任何原因崩溃或停止,那么我的守护进程将重新启动它 如何在C中检测另一个进程(不是子进程)是否已停止?检测另一个进程是否已终止的唯一方法是它是否是主管的子进程。在这种情况下,您可以在进程退出时调用wait或waitpid或安排处理SIGCHLD信号 这就是像upstart或systemd或runit甚至是legacyinit这样的处理器管理器的基本工作原理 这类工作还有其他方法,但它们最终是脆弱的,容易出现问题。例如,如果您知道正在运
wait
或waitpid
或安排处理SIGCHLD
信号
这就是像upstart
或systemd
或runit
甚至是legacyinit
这样的处理器管理器的基本工作原理
这类工作还有其他方法,但它们最终是脆弱的,容易出现问题。例如,如果您知道正在运行的进程的PID,您可以周期性地用kill(PID,0)
(一个错误指示给定的PID不再运行)…向它发送信号。但是此解决方案有两个问题:PID可以回收,因此,如果相同的PID仍然处于活动状态,则不能保证它实际上就是您感兴趣的过程。此外,这需要定期轮询正在运行的进程,而调用wait
或waitpid
可能是一种阻塞操作,这会产生更简单的代码
类似地,您可以在
/proc
中检查正在运行的进程列表,但这与以前的解决方案存在几乎相同的问题。要澄清,当您说“已停止”时,您是指进程已终止,还是指守护进程已停止?我希望是前者,但这会有所不同。