等待子进程完成

3
我希望我的父进程等待所有子进程和子进程的子进程结束。我使用了while(waitpid(-1,NULL,0)),但它只创建了一个无限循环。我也使用了waitpid(pid_child,&status,WNOHANG),但它只在子进程结束时结束,而不是子进程的子进程。
注意:pid_child是父进程从fork()得到的PID。

1
提交你的代码,而不是解释它。 - LPs
2
@LPs。我认为这个问题非常好,很清晰。我不会因为缺少分号而扣分OP。 - Mad Physicist
1个回答

4

一个进程只能等待它的直接子进程,不能等待子孙进程。

最好的方法是让子进程等待子孙进程,让父进程等待子进程。


同意“你能做的最好的是...”。但是,如果一个子进程终止,而其“孙子进程”仍在运行,我会期望该父进程成为“孙子进程”的新父进程:现在可以使用waitpid() - Ingo Leonhardt
当一个进程的父进程终止时,init 进程成为其父进程。无论祖父进程是否仍在运行都没有关系。 - dbush
你是对的,默认情况下 init 变成了父进程,我错了。但在 Linux 版本 3.4 以后,可以通过在父进程中调用 prctl(PR_SET_CHILD_SUBREAPER, 1, 0, 0, 0) 来改变这种行为。 - Ingo Leonhardt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接