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

标签 c linux process

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

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

最佳答案

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

从根本上来说,这就是像 upstartsystemdrunit 甚至旧版 init 这样的处理器管理程序的工作原理。

还有其他有点的工作方式,但它们最终都很脆弱并且容易出现问题。例如,如果您知道正在运行的进程的 PID,则可以定期使用 kill(pid, 0) 向其发出信号(错误表明给定的 pid 不再运行)...但是有此解决方案有两个问题: PID 可以回收,因此如果相同的 PID 仍然处于事件状态,则不能保证它实际上是您感兴趣的进程。此外,这需要定期轮询正在运行的进程,而调用 waitwaitpid 可能是阻塞操作,这会产生更简单的代码。

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

关于c - 如何检测另一个守护进程是否终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48598810/

相关文章:

c# - 如何让 dottrace 分析子进程?

c# - 我的 Windows 窗体应用程序在关闭后仍在作为任务运行

c++ - 与 sprintf 斗争......愚蠢的事情?

c - 冒泡排序使数组为空

linux - ARM9 异常导致系统崩溃并生成核心转储

python - Python 卡住集的持久哈希

c# - 后台工作程序错误中的进程

c - 本地套接字绑定(bind)错误

c - 如何对数组的一个子集进行平均并将结果存储在另一个数组中?

java - Linux安装grails的问题