SSH连接断开后无法重新连接到屏幕会话


16

我以前曾与进行长时间的屏幕对话screen -dr control。但是,有时此命令不会重新连接到屏幕,而是会永久挂起(在我终止后的10分钟以上)。仅当SSH连接意外断开时才会发生这种情况,而在用正确断开屏幕后则不会发生Ctrl-A d。其他开关,例如screen -xscreen -D -RR也不起作用。

这篇文章建议杀死举行屏幕会话的PTY,这将导致屏幕完成其断开连接。但是,它只是杀死了screen -dr control被调用的外壳。

例如:

$ ps -ef | grep control | grep -v grep
nomad     7387  7109  0 13:05 pts/50   00:00:00 screen -dr control
nomad    15299     1  0 Nov27 ?        00:13:47 SCREEN -S control

$ ps -ef | grep bash | grep 'pts/50'
nomad     7109  7108  0 12:49 pts/50   00:00:00 -bash

链接的帖子建议bash终止使用PID 7109 的进程。这也将终止使用PID 7387的screen -dr control进程。之后,我仍然无法连接到屏幕。

SCREEN -S control启动屏幕会话的进程具有init其父进程,我显然不能杀死它。

有没有办法重新连接到挂屏会话?

更新:这在使用内核2.6.32-358.6.1.el6.x86_64的CentOS 6.4上发生。这些外壳都是bash版本4.1.2(1)-发行版。


3
是什么screen -ls在那些“挂”的情况下说?screen -d -r <session>表示“分离并恢复”,因此不必直接分离它就没关系。(而且通常不
会这样做

尝试在屏幕进程上运行lsof,看看是否有“卡住”的东西。屏幕使用unix套接字在进程之间进行通信,可能是某些原因使其保持打开状态。另外,请确保未删除套接字或更改了其所有权。通常,您还应该包括所使用的操作系统和版本,尽管我没有什么特别的想法,这一次将取决于操作系统。
丹·普里兹

3
您是否正在通过另一跳进行ssh'ing,例如使用netcat作为代理命令?在这种情况下,我遇到了到第一个框的ssh连接断开的问题,但是netcat proxy命令使“第二个” ssh连接保持打开状态。-d应该可以工作。
詹斯·蒂默曼

詹斯,您的建议成功了。我确实通过netcat进行了代理,并在中间主机上将其杀死,这使我得以重新连接到屏幕上。
维克多·罗森菲尔德

您为什么要杀死挂屏命令的父进程?您想杀死附加屏幕命令本身。#7387在您的情况下。
Matthias Urlichs,2014年

Answers:


6

我认为你应该尝试

screen -DR 

下次也是如此-愤怒的(大写)调用应强制其断开您的中间网猫跃点正在举行的其他会话的连接。


我试过了,它不起作用。杀死netcat代理就可以了。
维克多·罗森菲尔德

奇怪。这应该。会发生什么呢?
Matthias Urlichs 2014年

屏幕的所有其他调用(-dr,-x,-DR)将永远挂起。一旦我杀死了netcat代理,这些调用就会再次起作用。
维克多·罗森菲尔德2014年

1

正如Jens Timmerman所建议的那样,这种奇怪行为的最终原因是我使用SSH ProxyCommand和连接到远程服务器ncat。杀死ncat中间计算机上的,之后我可以重新连接到屏幕会话。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.