运行 tail | grep 后按下 Ctrl – C 的过程中发生了什么

2018-08-22    来源:importnew

容器云强势上线!快速搭建集群,上万Linux镜像随意使用

从?https://ubuntuforums.org/showthread.php?t=1761120&s=bbaf101ffbcc9abdb032d90cff01fc36?中看到的,记录一下

在shell中运行 tail|grep 时发生了什么

  1. 运行tail
    • shell调用fork产生子进程
    • 重置信号处理函数为SIG_DFL
    • 产生新的进程组,并将子进程设置为该进程组的leader
    • exec tail
  2. 运行grep
    • shell调用fork产生子进程
    • 重置信号处理函数为SIG_DFL
    • 将进程加入到?tail?产生的进程组中
    • exec tail
  3. 将新产生的进程组放到前台,控制终端
    • tcsetpgrp(STDIN_FILENO, tail进程组);

当按下Ctrl-c时发生了什么

根据?setpgrp?manual page 的说法,按下?Ctrl-c?后:

  • 终端产生?SIGINT?信号
  • 前台进程组中的所有进程都会接收到?SIGINT?信号然后退出(默认动作)
  • shell通过调用?waitpid?清理进程表中子进程信息

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:MySQL 中 Identifier Case Sensitivity

下一篇:利用 Lambda 表达式实现 Java 中的惰性求值