【问题标题】:Waiting For child to finish等待孩子完成
【发布时间】:2016-11-30 06:39:59
【问题描述】:

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

注意:pid_child 是我在父进程中从 fork() 获得的 PID。

【问题讨论】:

  • 发布你的代码而不是解释它。
  • @LPs。我认为这个问题很好,很清楚。我不会把缺少的分号算在 OP 中。

标签: c fork infinite-loop


【解决方案1】:

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

你能做的最好的就是让孩子们等待孩子们的孩子,让父母们等待孩子们。

【讨论】:

  • 同意“你能做到的最好的......”。但是,如果一个孩子在一个“孙子”仍在运行的情况下终止,我希望父进程成为“孙子”的新父进程:现在waitpid() 应该是可能的。
  • @IngoLeonhardt 当进程的父进程终止时,init 进程成为父进程。祖父母是否还在跑步并不重要。
  • 你是对的,默认情况下,init 成为父级,我错了。但在 Linux 上,自 3.4 起,可以通过在父级中调用 prctl( PR_SET_CHILD_SUBREAPER, 1, 0, 0, 0 ); 来更改该行为
猜你喜欢
  • 2019-09-01
  • 2021-04-28
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-18
  • 1970-01-01
  • 2012-03-07
相关资源
最近更新 更多