我需要检测一个进程是否停止(如果崩溃,正常退出或其他任何事情都无关紧要)。
我的设置是这样的: - 任务A - 进行一些处理(偶尔会崩溃) - 任务B - 启动任务A,并等待结果
我的想法是在开始时在任务A中打开一个文件,并在任务B中使用inotify来检测任务A何时打开和关闭文件。当任务A停止(正常或崩溃)时,文件将被关闭,任务B将检测到这一点。 (当任务A崩溃时,文件将被关闭,对吗?)
我的问题是:
- 以上是否有效?
- 是否有更简单或更好的方法来检测任务A停止?
PS如果重要,我正在使用fedora 9
修改
上面的设置非常简化。我有2个任务B,大约30个任务A.因此,我无法使用system
和fork
答案 0 :(得分:3)
使用runit
或watch
等守护程序监视工具要容易得多。这些是为这项工作定制的,例如看着受控制的过程运行并死亡。如果您自己编写代码,请使用wait
和朋友等待生成的进程。
答案 1 :(得分:2)
taskB应该使用fork()
使taskA成为子进程。然后你可以wait(&status)
(在C中)... status
将保留任务A的退出代码。您可以阅读status
以检查它是否正常退出或是否有某种错误代码。
答案 2 :(得分:1)
您可以使用tcp套接字 - 即将B设置为服务器并允许A连接。 B应该定期向A写一个字节(在检测到A消失之前你想要的任何延迟)。当连接消失(即写入失败)时,你知道A已经消失了。