2016-07-26 102 views
3

我希望我的父進程等待所有子進程和子進程的子進程完成。我已經使用while(waitpid(-1,NULL,0)),但它只是創建了一個無限循環。我也使用了waitpid(pid_child,&status,WNOHANG),但它只是在子進程不結束子進程的子進程時結束。等待孩子完成

注意:pid_child是我在父進程中從fork()獲得的PID。

+1

發佈您的代碼而不是解釋它。 – LPs

+2

@LPs。我認爲這個問題很清楚。我不會計算對OP的缺失分號。 –

回答

4

進程可能只能等待它的直接子進程。它不能等待孩子的孩子。

您可以做的最好的事情是讓孩子們等待孩子的孩子,並讓孩子等待孩子的父母。

+0

贊同「你能做的最好......」。但是如果一個孩子終止了'仍在運行的'大孩子',我會期望父母成爲'大孩子'的新父進程:現在'waitpid()'應該是可能的。 –

+0

@IngoLeonhardt當進程的父進程終止時,init進程成爲父進程。祖父母是否仍在跑步並不重要。 – dbush

+0

你是對的,默認情況下'init'成爲父母,我錯了。但是從3.4開始,在Linux上,可以通過調用父級中的'prctl(PR_SET_CHILD_SUBREAPER,1,0,0,0)'來改變行爲 –