【发布时间】:2016-05-29 16:36:14
【问题描述】:
我知道 waitpid(-1...) 如何让我等到所有孩子都完成后,例如 waitpid(-1, &status)。但是我怎样才能等到所有 后台 进程完成?有人建议我可以使用相同的 waitpid(在循环中?)来实现这一点,但我不知道如何。
需要说明的是,我正在实现一个shell,并且需要添加一个新的内置命令wait,它会等到所有后台作业都终止后再返回提示。
我在 SO 上的其他地方读到“您还需要定期调用带有 WNOHANG 选项的 waitpid() - 例如,在您显示 shell 提示符之前。这将允许您检测后台进程何时退出或停止“但是,孩子!=背景。所以即使这样我也不相信。
编辑:
我最终只是在做 while(wait(NULL) > 0);就是这样,它奏效了。但是我仍然感到困惑的是,我不想区分前台和后台,因为我正在实现的等待只等待后台进程,并且在 wait() 或 waitpid 的眼中所有孩子都是平等的()。
同样,我使用 wait() 或 waitpid() 等待的子进程不一定是后台进程。我错了吗?
【问题讨论】:
-
C 没有“后台进程”的概念。背景与前景是外壳作业控制的事情。那么你是什么意思呢?
-
我正在实现一个shell,所以你完全正确。