我以前用screen -dr control重新连接到一个长时间的屏幕会话。 但是,有时这个命令不会重新连接到屏幕上,而是永远挂起(10分钟以后我中止了)。 这只发生在SSH连接意外丢失时,而不是在用Ctrl-A d正确分离屏幕时发生。 其他开关,例如screen -x或screen -D -RR也不起作用。
这个postbuild议杀死持有屏幕会话,这将导致屏幕完成其断开连接的PTY。 但是,它只是杀死了screen -dr control被调用的shell。
例如:
$ 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
链接的postbuild议用PID 7109杀死bash进程。这也将终止使用PID 7387的screen -dr control进程。之后,我仍然无法连接到屏幕。
启动屏幕会话的过程SCREEN -S control有init作为其父项,我显然不能杀死它。
有没有办法重新挂接到屏幕会话?
更新:这发生在使用内核2.6.32-358.6.1.el6.x86_64的CentOS 6.4上。 shell是所有bash版本4.1.2(1) – 释放。
我想你应该尝试
screen -DR
下一次 – 愤怒的(大写)调用应该强制它断开你的中间netcat中继所持有的其他会话。
正如Jens Timmerman所build议的那样,这种奇怪行为的最终原因是我使用SSH ProxyCommand和ncat连接到远程服务器。 杀死中间机器上的ncat后,我可以重新连接到屏幕会话。
如果这是一个频繁的问题,你也可以考虑使用mosh作为sshreplace: