我想开发一个守护进程来监督另一个守护进程。如果其他守护进程因任何原因崩溃或停止,那么我的守护进程将重新启动它。
如何检测 C 中另一个进程(非子进程)是否停止?
最佳答案
检测另一个进程是否终止的唯一方法是它是否是您主管的子进程。在这种情况下,您可以调用 wait
或 waitpid
或安排在进程退出时处理 SIGCHLD
信号。
从根本上来说,这就是像 upstart
或 systemd
或 runit
甚至旧版 init
这样的处理器管理程序的工作原理。
还有其他有点的工作方式,但它们最终都很脆弱并且容易出现问题。例如,如果您知道正在运行的进程的 PID,则可以定期使用 kill(pid, 0)
向其发出信号(错误表明给定的 pid 不再运行)...但是有此解决方案有两个问题: PID 可以回收,因此如果相同的 PID 仍然处于事件状态,则不能保证它实际上是您感兴趣的进程。此外,这需要定期轮询正在运行的进程,而调用 wait
或 waitpid
可能是阻塞操作,这会产生更简单的代码。
同样,您可以检查 /proc
中正在运行的进程列表,但这与之前的解决方案存在几乎相同的问题。
关于c - 如何检测另一个守护进程是否终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48598810/