2016-07-26 90 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)'来改变行为 –