我的Linux進程有4個子進程。在一些執行時間之後,所有的孩子都被init進程所採用。我們如何防止這種情況? (殭屍進程並非如此)。防止子進程成爲孤兒進程
該進程是用C編寫的,操作系統是Linux。我的代碼調用waitpid!可能是什麼問題? 99,99%的人沒有這個問題。
最近更新:如果有人執行「kill -9」會怎麼樣?這會立即終止父進程並將子進程留給孩子。
我的Linux進程有4個子進程。在一些執行時間之後,所有的孩子都被init進程所採用。我們如何防止這種情況? (殭屍進程並非如此)。防止子進程成爲孤兒進程
該進程是用C編寫的,操作系統是Linux。我的代碼調用waitpid!可能是什麼問題? 99,99%的人沒有這個問題。
最近更新:如果有人執行「kill -9」會怎麼樣?這會立即終止父進程並將子進程留給孩子。
如果您的進程正在被init
重新設置,那意味着他們的父進程已經死亡。當一個進程的父母死亡時,init
採用它,這樣它就可以通過wait()
收穫該孩子時它(即,init
)收到SIGCHLD
。
如果你不想讓init
成爲你的孩子的父母,你將不得不確保你的程序一直存在,直到你所有的孩子都已經死亡並被你的程序收穫。
等孩子退出之前退出自己。有關更多詳細信息,請參見wait(2)
手冊頁。
從主頁面檢查您的waitpid API參數,並確保在所有子進程完成之前,您的父進程不應該結束。 你可以在這裏發佈你的代碼嗎?
您的編輯不會改變答案。 –