我使用 putty,无线连接不稳定,所以我使用 screen 来保持工作。我经常会断开连接,然后无法重新连接 screen。我运行它,screen -D -RR
它就一直呆在那里。我尝试ctrl+z找回控制台,然后按ps aux | grep screen
,然后kill -9
查看所有结果,然后screen -D -RR
再试一次,但结果还是一样。我尝试了您提到的任何 d 和 r 组合,但它仍然呆在那里。我的 screen 在那里,它什么也不做,至少不能恢复。
有人能提供关于如何恢复我的屏幕会话的任何提示、技巧或想法吗?
答案1
当我断开与活动屏幕的连接然后重新连接时,我看到了这种情况。 错误 #27462(“当原始会话丢失时,重新连接会停止”)描述了我所看到的问题。似乎发生的情况是,screen 试图通知持有它的 tty 它即将离开,但由于 tty 因连接断开而挂起,它必须等待超时(在某些情况下,超时时间长达五分钟)。
为了修复它,我这样做:
- 找出哪个 tty 正在占用屏幕会话
ps -ef | grep screen | grep pty
- 找到与该 tty 关联的登录 bash
ps -ef | grep bash | grep $PTY
- 杀死那个 bash
kill -KILL $PID
这将使屏幕正确完成断开连接,并允许您正常重新连接。
看这里获取一个可以自动执行此操作的示例脚本。
答案2
我的屏幕会话也遇到了类似的问题。我给它们命名并将它们设置为多用户会话。我发现它列出了我的会话,但告诉我没有可重新连接的会话。然后我尝试:
screen -x <session_name>
它非常有效!
答案3
无论我使用哪种类型的连接,我都从未遇到过屏幕无法恢复的问题。我通常使用以下方法:
ssh myname@foo
screen -S sessionName
(do my work... get disconnected...)
ssh myname@foo
screen -d (just to make sure anything wasn't left attached)
screen -r sessionName