GNU屏幕-失去连接后无法重新连接到屏幕


23

我在屏幕上使用了irssi,但失去了连接。回到服务器后,我将无法再连接到该屏幕。screen -ls显示屏幕已连接。

我尝试使用screen -D强制分离它,它说分离了,但是screen -ls仍然说它已经连接了。我尝试了screen -x,它只是挂在那里。

[sub@server ~]$ screen -ls 
There are screens on:
 4033.poe (Detached)
 7728.irssi (Attached)
2 Sockets in /var/run/screen/S-sub.

我现在能做什么?

Answers:


14

如果您尝试连接“附加”屏幕,请运行screen -xr irssi。大写字母“ -X”向一个屏幕会话发送命令,小写字母“ -x”选项使您可以重新连接到连接的会话。但是,由于存在多个会话,因此您仍需要提供会话名称。


9

我过去通过杀死启动屏幕会话的外壳来清除此行为。基本上,杀死我的用户属于屏幕的所有bash实例。


2
尝试了此处提到的所有选项(-RD,-xr),并且无法恢复会话。通过找到(ps -ef | grep bash)结束了SCREEN会话。
so_mv 2012年

4

您给它指定了非默认名称。尝试这个:screen -RD irssi


2
我有一个类似的问题,但屏幕-RD <名称>仍然挂起... :-(
harald 2011年

4

你可以试试:

#Reattach a session and if necessary detach it first.
screen -d -r 7728.irssi  

#Reattach a session. If necessary detach and logout remotely first.
screen -D -r 7728.irssi

使用全名总是一个好主意 pid.tty


3

screen以版本之间不向后兼容而闻名。如果的版本screen已在服务器上更新,则可能无法再附加到旧的屏幕会话。

在这种情况下,您可以使用旧的SCREEN二进制文件重新附加(只要您的分发包管理器将其保存在某个地方),或者完全终止该会话。


2

通过向GNU /屏幕进程发送SIGCHLD(在关闭窗口时通常会收到),我已经取得了一些成功,这迫使它触摸(并可能重新创建)套接字文件。

还要注意,有两种调用screen可执行文件的方式,只是大小写不同:SCREEN是您尝试重新连接的服务器端组件,screen还是客户端(在客户端和服务器端之间随机播放数据)。所以您可能想尝试取消小写版本...

例如,在下面的示例中,您可以看到my screenSCREEN进程不被视为父项和子项,这表明我已附加到现有会话。

# ps fao pid,command
25070 SCREEN -U
25071  \_ vim +let &t_Co=256
25073  \_ -bash
25077  \_ -bash
...
18364  \_ sshd: username [priv]
18366  |   \_ sshd: username@pts/17
18367  |       \_ -bash
  870  |           \_ screen -U -x

新鲜的会议看起来像这样:

19645  |  \_ screen -S MySession
19646  |      \_ SCREEN -S MySession
19647  |          \_ bash
 1485  |          |   \_ python
19700  |          \_ bash

如何发送SIGCHILD?
giorgio79

1
使用scarily命名kill:像这样的命令kill -s SIGCHLD <PID>,其中<PID>是进程ID号码(在我的示例输出最左边的列)
ROBM

1

这是我在使用vi的过程中发生的,这期间会话冻结,我断开了连接。当尝试使用screen -Arx重新连接到屏幕时,该过程将挂起。

可能正在运行类似的子进程,导致屏幕挂起。如果您还记得其中一个重点,否则要获取在屏幕下运行的子进程的列表,请执行以下操作:

ps ux -H

这将显示嵌套的子进程:

zwood    28481  0.0  0.0 101148  8844 ?        Ss   Oct07   1:36 SCREEN -S mysession
zwood    28482  0.0  0.0  67436  1744 pts/2    Ss+  Oct07   0:00   /bin/bash
zwood    28515  0.0  0.0  67556  1876 pts/4    Ss+  Oct07   0:00   /bin/bash
zwood     4498  0.0  0.0  67436  1772 pts/5    Ss   Oct07   0:00   /bin/bash
zwood     2007  0.0  0.0  73604  1324 pts/5    S+   15:47   0:00     vi /home/zwood/.bashrc.custom
zwood    14670  0.0  0.0  67436  1768 pts/13   Ss+  Oct14   0:00   /bin/bash
zwood    27002  0.0  0.0  67436  1720 pts/11   Ss+  Oct20   0:00   /bin/bash
zwood    24748  0.0  0.0  67432  1712 pts/14   Ss+  Oct21   0:00   /bin/bash

首先杀死了导致问题的vi进程后,我能够重新连接屏幕而没有任何问题。杀死以前重新挂接到屏幕上的所有进程可能也是一个好主意。只需使用:

kill -9 <pid>

我不知道屏幕在内部做什么,为什么vi导致屏幕挂起,或者为什么取消vi进程会使屏幕恢复原状。过去,我曾遇到过有关屏幕的问题,并且尝试过大多数人在此主题中所推荐的方法,但是没有运气。找到这个有问题的子进程是唯一对我有用并且始终如一的工作。


屏幕下的疯狂处理也是唯一拯救我的东西。我宁愿在屏幕下失去很多流程,也不愿在整个屏幕上都失去经验!
Yonatan


0
killall -9 sshd

它为我工作。我有3个不同的屏幕,并且失去了3个不同的ssh连接。重新连接后,屏幕仍然连接,我在上面发出了命令...当然,我已经失去了当前的连接,但这是一个全新的连接。在下一次重新连接时,每个屏幕都被分离。

注意,如果您是超级用户,则应使用该--user选项仅杀死ssh守护程序。

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.