一个愚蠢的问题:我刚刚通过 cmd 行注销了与远程计算机的 ssh 会话。有什么原因导致其他作业终止或计算机关闭?这一切都是由于网络连接和 ssh 会话被挂起而发生的。我当时只需要按 ctrl + z,它就会显示有作业已停止。
远程机器:Ubuntu
提前致谢!
答案1
好吧,如果网络问题导致连接挂起,则意味着数据包无法通过。这当然意味着客户端的“关闭连接”数据包也无法通过。
因此在网络出现问题时,服务器不知道您已经终止了客户端。它只有在尝试发送更多数据并且 a) 没有收到确认,或 b) 收到重置数据包(“此连接不再存在”)时才会发现这一点。
不管怎样,一旦发现 SSH 连接中断,sshd 就会向前台运行的任何程序(无论是 shell 还是文本编辑器,或其他程序)发送“挂断”信号 (SIGHUP)。shell 随后会向所有后台作业发送相同的 SIGHUP,然后退出。因此,后台作业也会退出。(nohup
毕竟,这就是此类工具存在的原因。)
如果你ssh
在网络正常时终止连接,也会发生同样的事情——服务器将收到“连接重置”数据包并向 shell 发送“挂断”。
最后,如果您通过 shell 本身注销(使用exit
或CtrlD),它也会自行经历相同的清理过程,尽管这次它有机会提醒您正在运行的作业。