sshd分叉子进程来创建新会话。 这是pstree的输出(部分):
sshd(1230) -- sshd(1234) -- bash
(...)
|- sshd(1235) -- bash -- a.out -- a.out
运行“kill -9 1235”后,a.out死掉(捕获的信号为SIGHUP)
为什么?
TKS!
答案 0 :(得分:7)
ssh
(以及终端模拟器,screen
,tmux
,script
以及其他一些程序)使用称为“伪tty”的东西(或“ pty“),其行为类似于拨号调制解调器连接。我这样描述是因为这是这种行为的历史根源:如果由于某种原因丢失了调制解调器连接,tty(或pty)驱动程序检测到丢失了运营商并发送了SIGHUP
(“Hangup
“)到你的会议。这使程序能够保存其状态(例如,vi
/ vim
将保存您已修改但未保存以进行恢复的所有文件)并完全关闭。同样,如果网络连接由于某种原因而消失(有人因为某些奇怪的原因而绊倒电源或网络电缆?...或sssh
转储核心),pty会向您的会话发送SIGHUP
,它有机会保存任何未保存的数据。
从技术上讲,tty / pty驱动程序将信号发送到连接到终端的进程组中的每个进程(进程组也与shell作业控制有关,但这是他们最初的目的)。其他一些终端信号的处理方式相同,例如 Ctrl + C 发送SIGINT
和 Ctrl + \ < / kbd>发送SIGQUIT
(和 Ctrl + Z 发送SIGTSTP
,以及通过暂停自己来处理SIGTSTP
的程序发送SIGSTOP
;此双重信号允许vim
将终端从编辑模式设置为正常模式,并在许多终端模拟器中交换到预编辑屏幕缓冲区。)