在运行前台进程时等待后台进程终止

时间:2015-10-31 15:13:21

标签: c operating-system signals

我的shell中安装了SIGCHILD处理程序。让我们说我使用waitpid等待前台进程终止,以便我可以收获它。

据我所知,waitpid暂停当前进程并等待给定进程终止,是吗?

如果其中一个后台进程在我的shell等待前台进程时终止了怎么办?我的shell何时会收到终止的后台进程?如何确保立即获得后台流程?

1 个答案:

答案 0 :(得分:0)

只需让你的父shell在一个循环中等待任何死亡的孩子,当waitpid()返回时你分析该孩子死亡的结果。

int status;
int corpse;

while ((corpse = waitpid(-1, &status, 0)) != -1)
{
    …perform post-mortem actions…
} 
  • 如果前台进程死亡(已完成),您将继续提示输入下一个命令。
  • 如果一个后台进程死了,你会注意到它已经消失,可能记录它的状态,然后回到另一个循环循环。

当前台进程退出时,您将在发出下一个提示之前报告任何已经死亡的孩子。

由于-1值,您永远不应该退出该循环。