运行 tail|grep 后按下 Ctrl-C 的过程中发生了什么
在 shell 中运行 tail|grep 时发生了什么
- 运行 tail
- shell调用 fork 产生子进程
- 重置信号处理函数为 SIG_DFL
- 产生新的进程组,并将子进程设置为该进程组的leader
- exec tail
- 运行 grep
- shell 调用 fork 产生子进程
- 重置信号处理函数为 SIG_DFL
- 将进程加入到
tail
产生的进程组中 - exec tail
- 将新产生的进程组放到前台,控制终端
- tcsetpgrp(STDIN_FILENO, tail 进程组);
当按下 Ctrl-c 时发生了什么
根据 setpgrp
manual page 的说法,按下 Ctrl-c
后:
- 终端产生
SIGINT
信号 - 前台进程组中的所有进程都会接收到
SIGINT
信号然后退出(默认动作) - shell 通过调用
waitpid
清理进程表中子进程信息
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论