【发布时间】:2015-10-08 00:04:06
【问题描述】:
我有一个监控程序,我想检查系统中的各种进程,并知道它们何时终止。我也想知道他们的退出代码,以防他们崩溃。但是,我的程序不是要监控的进程的父级。
在 Windows 中,这很容易:OpenProcess 获得 SYNCHRONIZE 权限,WaitForMultipleObjectsEx 等待其中任何一个终止,然后 GetExitCodeProcess 找出它终止的原因(如果原因是一个例外)。
但在 Linux 中,这些等价物 waitpid 仅适用于您自己的子进程,而不适用于不相关的进程。我们尝试了ptrace,但这会导致其自身的问题,例如大大减慢信号处理速度。
此程序旨在以 root 身份运行。
除了轮询/proc/12345 直到它消失之外,有没有办法实现这一点?
【问题讨论】:
-
你能发布一个使用 ptrace 的最小示例吗?这看起来像是在 linux 中的正确方法,但也许可以改进。