2016-07-26 21 views
3

子プロセスと子プロセスの子プロセスが終了するまで、親プロセスが待機するようにします。 while(waitpid(-1,NULL,0))を使用しましたが、無限ループが作成されました。 waitpid(pid_child,&status,WNOHANG)も使用しましたが、子プロセスが子プロセスの子プロセスを終了しない場合にのみ終了します。子が終了するのを待つ

注:pid_childは親プロセスのfork()から得たPIDです。

+1

説明する代わりにコードを投稿してください。 – LPs

+2

@ LPs。私は質問がかなり良いと思う。私は、OPに対して不足しているセミコロンを数えません。 –

答えて

4

プロセスは、直接の子プロセスだけを待つことができます。子供の子供を待つことはできません。

あなたができることは、子供たちに子供たちを待って、親が子どもを待たせることです。

+0

は「あなたができる最高の...」と合意しました。しかし、子供が ' ' grand child 'を実行して終了した場合、私は親が' grand child 'の新しい親プロセスになると期待します。今や 'waitpid()'が可能でなければなりません。 –

+0

@IngoLeonhardtプロセスの親が終了すると、 'init'プロセスが親プロセスになります。祖父母がまだ走っているかどうかは関係ありません。 – dbush

+0

あなたは正しく、デフォルトでは 'init'が親になりました、私は間違っていました。しかし、3.4以降のLinuxでは、親プロセスで 'prctl(PR_SET_CHILD_SUBREAPER、1、0、0、0);' –

関連する問題