无法脱离屏幕以恢复


11

我使用腻子并建立了不可靠的无线连接,因此我使用屏幕来保持工作正常进行。通常,我会断开连接,然后无法重新连接屏幕。我会跑步screen -D -RR,它会无限期地坐在那儿。我试图ctrl+z找回控制台,ps aux | grep screen然后kill -9是所有结果,然后screen -D -RR再是,但是得到的结果是相同的。我会尝试提及d和r的任意组合,但仍然只是坐在那里。我的屏幕在那里,它什么也不会做,至少是所有简历。

有人对如何恢复我的屏幕会话有任何提示,技巧或想法吗?

Answers:


16

在断开与活动屏幕的连接然后重新连接时,我已经看到了这一点。 错误#27462(“丢失原始会话时重新连接停顿”)描述了我所看到的问题。似乎发生的情况是屏幕正在尝试通知持有该屏幕的tty即将离开,但是由于tty由于连接断开而挂起,因此它必须等待超时发生(长达五分钟)在某些情况下)。

要修复它,我这样做:

  • 找出哪个tty正在进行屏幕会话 ps -ef | grep screen | grep pty
  • 查找与该tty相关的登录bash ps -ef | grep bash | grep $PTY
  • 杀死那个猛击 kill -KILL $PID

这将导致屏幕正确完成其断开连接,并让您正常地重新连接。

请参阅此处的示例脚本,以某种方式使其自动化。


ps -ef | grep屏幕| grep tty不会输出任何内容,因为ps -ef | grep屏幕从不返回任何带有字符串tty的内容。
Dave Aaron Smith

实际上,示例脚本似乎可以解决问题。谢谢!
戴夫·亚伦·史密斯

1
是的,我的意思是“ pty”,而不是“ tty”。
David Mackintosh,2010年

2

我的屏幕会话有类似的问题。我给它们命名,并将它们设置为多用户会话。我发现它正在列出我的会话,但告诉我没有人可以重新连接。然后我尝试了:

screen -x <session_name>

它像冠军一样运作!


1

我不能说我遇到了问题,无论连接什么类型的屏幕都无法返回。我通常的方法:

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

1
例如,screen -list返回32322.mySession(附加)。然后我筛选-d mySession。然后screen -list仍然返回32322.mySession(已附加),而screen -r mySession返回没有与daveSession匹配的屏幕可以恢复。
Dave Aaron Smith

您是否尝试过“ screen -d”?
杰森·安特曼


0

灵魂:https ://kb.iu.edu/data/ahrm.html

To see your existing screen sessions, enter:
  screen -list
This will display a list of your current screen sessions. For instance, if you had one attached screen, you would see:

         1636.pts-21.hostname      (Attached)

To detach an attached screen, enter:
  screen -D
If you have more than one attached screen, you can specify a particular screen to detach. For example, to detach the screen in the above example, you would enter:
  screen -D 1636.pts-21.hostname

0

如果您像我一样聪明,则尝试像root普通用户帐户一样恢复开始的屏幕会话。通过ls /var/run/screen向我显示目录找到了这一点root


0

我有时会遇到相同的问题(屏幕-r -d无法恢复,无响应)。要解决此问题,请找到与屏幕会话关联的终端(tty / pty):

screen -list
There is a screen on:
    28176.pts-51.localhost        (Attached)
1 Socket in /tmp/uscreens/S-xxxx.

找到列出的终端(在本示例中为pts-51):

ps axuw | grep 'pts/51'   # will vary depending upon how pty's are named
you     12293  0.0  0.2  2148 1128 pts/51   Ss   10:34   0:00 -bash

终止该终端(通常是您的shell)上的进程:

kill 12293

再次运行ps以确保它消失了。如果不 :

kill -9 12293

在我的服务器(gnu / linux)上,有时我不得不杀死-9次,直到它死掉。

在该tty上的所有进程都消失之后,屏幕应正确恢复:

screen -r -d

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.