2011-10-05 36 views
2

我需要检测,如果一个进程停止(如果坠毁无所谓,正常退出,或其他任何东西)。检测进程是否崩溃(或停止)的简单方法?

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

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

我的问题是:
- 上述工作是否正常?
- 有没有更简单或更好的方法来检测任务停止?

PS如果它的事项,我使用的Fedora 9

编辑 的上面设置非常简单。我有任务B 2和任务A.大约30因此,我不能使用systemfork

+1

我不认为你有30个任务A左右的事实改变了什么,当使用fork()。 –

回答

3

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

2

taskB应该使用fork()做任务A的子进程。然后,你可以wait(&status) (C语言)... status将举行任务A的退出代码可以读取status检查,看它是否正常退出或某种错误代码。

1

你可以使用一个TCP套接字 - 即集B了一个服务器,并允许进行连接。 B应定期向A写入一个字节(在检测到A消失之前,无论你想要什么延迟)。当连接消失(即写入失败)时,你知道A已经消失。