use*_*198 2 linux ssh tty linux-kernel pty
我们知道,当 ssh 连接断开时,bash 将收到 SIGHUP 信号,并将此信号转发给其所有子节点。
我想知道这个SIGHUP的原始发送者是谁,是ssh客户端、ssh服务器、操作系统还是其他?
我阅读了openssh-portabal的代码,发现只有这里使用了SIGHUP: https: //github.com/openssh/openssh-portable/blob/master/sshconnect.c#L285
调用者似乎是客户端: https://github.com/openssh/openssh-portable/blob/master/ssh.c#L1533
我在服务器端 sshd.c 中没有找到任何发送者代码
这是否意味着发件人是客户端?在这种情况下,如果连接中断,服务器将不会收到 SIGHUP。我对此不太确定,但根据我的经验,这似乎不是真的。
所以我很好奇谁应该是原始发件人。这有标准吗?
连接服务器端的 bash 进程正在运行,其控制终端设置为伪终端对的从属端,主端连接到该进程sshd。
当连接终止时,sshd进程关闭伪终端的主端,这导致内核伪终端驱动程序挂起伪终端的从端。当从机端挂起时,内核tty核心向终端的会话领导者(通常是该进程)以及会话领导者进程组中的每个进程发送SIGHUP信号。SIGCONTbash
这并非特定于伪终端和 ssh - 如果您通过连接到串行端口的调制解调器拨入服务器并且调制解调器挂断(这就是“挂断”/SIGHUP命名的来源),也会发生同样的情况。正如你所知,这是长期存在的历史行为。
| 归档时间: |
|
| 查看次数: |
324 次 |
| 最近记录: |