2011-10-05 62 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已經消失。