检测进程是否崩溃(或停止)的简单方法?

时间:2011-10-05 08:31:50

标签: c++ c linux

我需要检测一个进程是否停止(如果崩溃,正常退出或其他任何事情都无关紧要)。

我的设置是这样的: - 任务A - 进行一些处理(偶尔会崩溃) - 任务B - 启动任务A,并等待结果

我的想法是在开始时在任务A中打开一个文件,并在任务B中使用inotify来检测任务A何时打开和关闭文件。当任务A停止(正常或崩溃)时,文件将被关闭,任务B将检测到这一点。 (当任务A崩溃时,文件将被关闭,对吗?)

我的问题是:
- 以上是否有效? - 是否有更简单或更好的方法来检测任务A停止?

PS如果重要,我正在使用fedora 9

修改 上面的设置非常简化。我有2个任务B,大约30个任务A.因此,我无法使用systemfork

3 个答案:

答案 0 :(得分:3)

使用runitwatch等守护程序监视工具要容易得多。这些是为这项工作定制的,例如看着受控制的过程运行并死亡。如果您自己编写代码,请使用wait和朋友等待生成的进程。

答案 1 :(得分:2)

taskB应该使用fork()使taskA成为子进程。然后你可以wait(&status) (在C中)... status将保留任务A的退出代码。您可以阅读status以检查它是否正常退出或是否有某种错误代码。

答案 2 :(得分:1)

您可以使用tcp套接字 - 即将B设置为服务器并允许A连接。 B应该定期向A写一个字节(在检测到A消失之前你想要的任何延迟)。当连接消失(即写入失败)时,你知道A已经消失了。