我知道当我按下Ctrl-C时,操作系统pts系统会解释它并向前台进程组发送SIGINT
。我只是想知道它是如何通过tmux
传播的。
假设我正在使用X服务器和窗口管理器运行普通的Linux。我打开了xterm
,其中zsh
正在运行tmux
。在此tmux
中,我正在运行bash
并在其中运行./a.out
。
过程树,如window manager
- > xterm
- > zsh
- > tmux client
。然后tmux server
- > bash
- > ./a.out
。
所以当我按下键盘上的Ctrl-C时,X服务器首先捕获它并告诉活动窗口xterm
"嘿,这个人只需按下Ctrl-C"。 xterm
通过发送到伪终端zsh
a" Ctrl-C"告诉它直接运行的进程(pts/0
)我点击了Ctrl-C字符。操作系统看到了一个" Ctrl-C"伪终端中的字符并将其转换为SIGINT
到前台进程组(zsh
和tmux client
)。然后tmux client
必须已收到此SIGINT
,因此它会告知tmux server
和tmux server
然后将SIGINT
发送到它刚刚创建的伪终端的前台进程组(其中bash
和./a.out
)。对不起,如果一切看起来都很混乱。但由于tmux
的工作原理,tmux server
和tmux client
是两个独立的流程。
现在,如果我想模仿这种行为,我可以发送一个SIGINT
给tmux client
并期望./a.out
收到SIGINT
,好像我只是按了# 34;按Ctrl-C"在我的键盘上。但没有任何反应。我想我错了,你可以帮我吗?