【发布时间】:2018-02-10 02:49:32
【问题描述】:
具体来说,在终端中按下 Ctrl-C 会发生什么?是的,我知道它会发送 SIGINT,但需要采取哪些步骤才能到达那里?
我做了一些研究,所以我认为我理解了大部分图片,但不是全部。
为了教学,我假设我们在 X 会话中运行终端仿真器 xterm。终端正在运行 Bash shell,而 shell 当前正在运行一些长期运行的管道,该管道由前台中的多个进程组成。
- 我按键盘上的 Ctrl-C。
- X 将键盘事件发送到 xterm。
- xterm 翻译 Ctrl-C 键盘事件并将其发送到它所持有的伪 tty 主文件描述符? (发生了一些奇迹)
- 内核检测到伪 tty 上发生了一些特殊的 SIGINT 事件,并找到其控制终端是该 tty 的会话。它将 SIGINT 发送到该会话的当前前台进程组,其中仅包括我们管道中的进程。
我的问题是,到目前为止我的理解是否正确,xterm 究竟如何告诉内核将 SIGINT 发送到具有给定控制终端的会话?
【问题讨论】:
-
真的不是很神奇,你按下 CTRL-C,Xterm 会解释它并将 SIGINT 发送到该 TTY 的前台进程(信号由内核处理),仅此而已
标签: bash shell session signals