2011-07-25 46 views
0

我的Linux進程有4個子進程。在一些執行時間之後,所有的孩子都被init進程所採用。我們如何防止這種情況? (殭屍進程並非如此)。防止子進程成爲孤兒進程

該進程是用C編寫的,操作系統是Linux。我的代碼調用waitpid!可能是什麼問題? 99,99%的人沒有這個問題。

最近更新:如果有人執行「kill -9」會怎麼樣?這會立即終止父進程並將子進程留給孩子。

+0

您的編輯不會改變答案。 –

回答

2

如果您的進程正在被init重新設置,那意味着他們的父進程已經死亡。當一個進程的父母死亡時,init採用它,這樣它就可以通過wait()收穫該孩子時它(即,init)收到SIGCHLD

如果你不想讓init成爲你的孩子的父母,你將不得不確保你的程序一直存在,直到你所有的孩子都已經死亡並被你的程序收穫。

1

等孩子退出之前退出自己。有關更多詳細信息,請參見wait(2)手冊頁。

0

從主頁面檢查您的waitpid API參數,並確保在所有子進程完成之前,您的父進程不應該結束。 你可以在這裏發佈你的代碼嗎?