Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux ssh连接关闭时,谁是SIGHUP的原始发件人?_Linux_Ssh_Linux Kernel_Tty_Pty - Fatal编程技术网

Linux ssh连接关闭时,谁是SIGHUP的原始发件人?

Linux ssh连接关闭时,谁是SIGHUP的原始发件人?,linux,ssh,linux-kernel,tty,pty,Linux,Ssh,Linux Kernel,Tty,Pty,我们知道,当ssh连接断开时,bash将收到SIGHUP,并将此信号转发给它的所有子级 我想知道谁是这个SIGHUP的原始发送者,是ssh客户端、ssh服务器、操作系统还是其他什么 我阅读了openssh portabal的代码,发现这里只使用了SIGHUP: 来电者似乎是客户: 我在服务器端sshd.c中没有找到任何发件人代码 这是否意味着发件人是客户机?在这种情况下,如果连接中断,服务器将不会接收到SIGHUP。我对此不太确定,但根据我的经验,这似乎不是真的 所以我很好奇谁应该是最初的发送

我们知道,当ssh连接断开时,bash将收到SIGHUP,并将此信号转发给它的所有子级

我想知道谁是这个SIGHUP的原始发送者,是ssh客户端、ssh服务器、操作系统还是其他什么

我阅读了openssh portabal的代码,发现这里只使用了SIGHUP:

来电者似乎是客户:

我在服务器端sshd.c中没有找到任何发件人代码

这是否意味着发件人是客户机?在这种情况下,如果连接中断,服务器将不会接收到SIGHUP。我对此不太确定,但根据我的经验,这似乎不是真的


所以我很好奇谁应该是最初的发送者。是否有此标准?

连接服务器端的bash进程正在运行,其控制终端设置为伪终端对的从端,主端连接到
sshd
进程

当连接终止时,
sshd
进程关闭伪终端的主端,这导致内核伪终端驱动程序挂起伪终端的从端。当从机端挂起时,内核tty内核将
SIGHUP
SIGCONT
信号发送到终端的会话负责人(通常是
bash
进程)和会话负责人的进程组中的每个进程

这并不特定于伪终端和ssh—如果您通过连接到串行端口的调制解调器拨入服务器,并且调制解调器挂断(这就是“挂断”/
SIGHUP
命名”的来源),则会发生同样的情况。正如您所知,这是一种历史悠久的行为。

我还检查了RFC,没有与SIGHUP相关的描述