恢复在删除的 SSH 会话中运行的命令

Joh*_*ers 34 linux ssh

读到这个问题让我感到疑惑。假设screen没有被使用。如果 Linux 目标上的 SSH 会话因任何原因被删除,并且您在服务器因超时而终止会话之前重新连接,是否有可能重新获得对正在运行的命令的控制,使其不会因会话中断而被中止?

小智 13

尝试将新终端的当前 STD* 文件描述符连接到旧的正在运行的进程只是自找麻烦。即使您确实设法做到了,终端的作业控制也不会按预期工作。如果您最终退出被接管的程序,那么您将留下一团糟,以及牺牲其文件描述符以移交给新后台进程的 shell 会发生什么。当 shell 消失时 ssh 会保持打开状态吗?可能不是。所以你需要先将它重定向到其他地方。

可能与否,我敢打赌,让被放弃的进程“自然地”终止更为可取。如果您正在做任何足够重要的事情来证明尝试执行恢复控制所需的所有技巧并且您处于不稳定的链接上,那么您可能应该提前知道并只使用 screen(或 vnc,或任何浮动您的分离 -控制船)。:)


小智 5

我知道这是一个老问题,但我觉得添加我的发现很重要,以防其他人像我一样遇到这个问题。

我没有看到这样做有任何不寻常的后果,是的,但这是我使用的,并且效果非常好。有时,当我们在服务器上运行长进程时,它偶尔会断开 ssh 会话。该进程与 tty 会话似乎仍在运行,但我们无法重新连接到它。我发现下面的程序将进程拉到新连接的会话中。

https://github.com/nelhage/reptyr

这里有更多信息

https://blog.nelhage.com/2011/02/changed-ctty/

  • 欢迎来到服务器故障!虽然这在理论上可以回答这个问题,但 [最好](​​http://meta.stackexchange.com/q/8259) 在此处包含答案的基本部分,并提供链接以供参考。 (6认同)