运行 tail|grep 后按下 Ctrl-C 的过程中发生了什么
时间:12-14来源:作者:点击数:
城东书院 www.cdsy.xyz
在 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 清理进程表中子进程信息
城东书院 www.cdsy.xyz