我的shell中安装了SIGCHILD处理程序。让我们说我使用waitpid等待前台进程终止,以便我可以收获它。
据我所知,waitpid暂停当前进程并等待给定进程终止,是吗?
如果其中一个后台进程在我的shell等待前台进程时终止了怎么办?我的shell何时会收到终止的后台进程?如何确保立即获得后台流程?
答案 0 :(得分:0)
只需让你的父shell在一个循环中等待任何死亡的孩子,当waitpid()
返回时你分析该孩子死亡的结果。
int status;
int corpse;
while ((corpse = waitpid(-1, &status, 0)) != -1)
{
…perform post-mortem actions…
}
当前台进程退出时,您将在发出下一个提示之前报告任何已经死亡的孩子。
由于-1
值,您永远不应该退出该循环。