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

标签 c operating-system signals

我的 shell 中安装了 SIGCHILD 处理程序。假设我正在使用 waitpid 来等待前台进程终止,以便我可以获取它。

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

如果当我的 shell 等待前台进程时其中一个后台进程终止怎么办?我的 shell 何时会获取已终止的后台进程?如何确保后台进程立即被收获?

最佳答案

只需让您的父 shell 循环等待任何死亡的子进程,当 waitpid() 返回时,您就可以分析该子进程死亡后要做什么。

int status;
int corpse;

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

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

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

关于c - 在运行前台进程时等待后台进程终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33453114/

相关文章:

c - 用 write 代替 printf 进行信号处理

unix - 打印到屏幕会导致切换到内核模式并在 Unix 中运行 OS 代码吗?

operating-system - 在 Fortran 中获取文件分隔符

perl - 在关闭文件句柄时向 perl 脚本发送信号

c - 在 C 中处理 SIGINT

c - scanf 之后 fgets 不起作用

c - 在 C 中获取命令行参数?

c - Bison 中奇怪的 C 代码 (yyerror)

operating-system - 中断屏蔽:为什么?

c++ - 原子 "check signal and enter system call"操作