当我失去与 *nix 机器的远程连接时,正在运行的进程会发生什么?

当我失去与 *nix 机器的远程连接时,正在运行的进程会发生什么?

我偶尔会丢失与 VPS 的远程 SSH 连接。我将其用于screen长时间运行的进程,但我想知道screen如果我丢失与机器的连接,除了会话中运行的进程之外,我正在运行的进程会发生什么。

当我重新建立与盒子的连接时,断开连接时正在运行的 bash 和 sshd 进程发生了什么?今天我多次断开连接,并注意到 bash 和 sshd 进程比平时多得多。

如果有进程挂起,我需要终止它们吗?如何确定上一次会话中放弃了哪些进程?

谢谢大家的回复!

答案1

通常情况下,进程将在断开连接时终止,但旧的 SSH 会话可能正在等待超时,或者可能已经退出时挂起,由于竞争条件。

您可能应该终止旧会话,尽管您不一定非要这样做。ps aux在控制台上键入以列出进程,然后kill PID针对每个挂起的 ssh 会话键入,其中 PID 是该会话的 PID(进程 ID)。较旧的挂起会话的 PID 应该低于您当前的新会话。

如果有一个长时间运行的进程,你特别希望它在断开连接后继续运行,你可以在命令前加上 nohup:

nohup badblocks -nvs /dev/sda &

答案2

当 ssh 会话终止时,关联的伪 tty 将关闭并重置。通常,与该 tty 关联的 shell 和其他进程将被终止,因为它们是创建它的进程的子进程。如果有进程挂起,也许它们已被后台处理?是的,它们可能应该被终止 - 清洁是至高无上的。它们确实占用一些资源 - 通常不多,但一段时间后可能会累积起来。

相关内容