gpt4 book ai didi

linux - 当 ssh 连接关闭时,SIGHUP 的原始发送者是谁?

转载 作者:太空狗 更新时间:2023-10-29 11:40:30 24 4
gpt4 key购买 nike

正如我们所知,当 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进程关闭伪终端的主端,导致内核伪终端驱动挂起伪终端的从端。当slave端挂了,kernel tty核心发送SIGHUPSIGCONT向终端的 session 负责人(通常是 bash 进程)和 session 负责人的进程组中的每个进程发出信号。

这并不特定于伪终端和 ssh - 如果您通过连接到串行端口的调制解调器拨入服务器并且调制解调器挂断(这是“挂断”/SIGHUP 命名起源)。如您所知,这是长期存在的历史行为。

关于linux - 当 ssh 连接关闭时,SIGHUP 的原始发送者是谁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55012153/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com