我需要检测一个进程是否停止(不要紧,如果坠毁,正常退出,或其他)。
我的设置是这样的: – 任务A – 做一些处理(偶尔崩溃)。
– 任务B – 启动任务A,并等待结果
我的想法是开始时在任务A中打开一个文件,并在任务B中使用inotify来检测任务A何时打开和closures文件。 当任务A停止(正常或崩溃)时,文件将被closures,任务B将检测到这一点。 (当任务A崩溃时,文件将被closures,对不对?)
我的问题是:
– 以上是否正常工作?
– 有没有更简单或更好的方法来检测任务停止?
PS如果有问题,我使用的是Fedora 9
编辑上面的设置非常简单。 我有2个任务B和30个任务A.因此,我不能使用system
和fork
使用守护进程监视工具(如runit
或watch
)要容易得多。 这些是为这个工作定制的,例如看一个受控的过程运行和死亡。 如果你自己编写代码,使用wait
和friends来等待产生的进程。
taskB应该使用fork()
使taskA成为其子进程。 然后你可以wait(&status)
(在C中)… status
将保存任务A的退出代码。你可以读取status
来检查它是否正常退出,或者是否有某种错误代码。
你可以使用一个TCP套接字 – 即将B设置为服务器并允许A连接。 B应该定期向A写入一个字节(在检测到A已经消失之前,不管你想要什么延迟)。 当连接消失(即写入失败),你知道A已经消失。