重新连接到现有的屏幕会话


81

我有一个在屏幕下运行的程序。实际上,当我从会话中分离并检查netstat时,可​​以看到程序仍在运行(这是我想要的):

udp        0      0 127.0.0.1:1720          0.0.0.0:*                           3759/ruby       

现在,我想重新连接到运行该进程的会话。所以我启动了一个新终端,然后输入screen -r

$ screen -r
There are several suitable screens on:
    5169.pts-2.teamviggy    (05/31/2013 09:30:28 PM)    (Detached)
    4872.pts-2.teamviggy    (05/31/2013 09:25:30 PM)    (Detached)
    4572.pts-2.teamviggy    (05/31/2013 09:07:17 PM)    (Detached)
    4073.pts-2.teamviggy    (05/31/2013 08:50:54 PM)    (Detached)
    3600.pts-2.teamviggy    (05/31/2013 08:40:14 PM)    (Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.

但是我怎么知道正在运行该进程的会话是哪个?

现在我遇到的文件之一说:

“使用窗口时,请输入Ca A为其命名。此名称将在窗口列表中使用,当您开始使用大量窗口时,它将帮助您记住每个窗口的操作。 ”

问题是当我处于新的屏幕会话中时,我尝试按Ctrl + A,却什么也没有发生。


选择一个从一个快速方法列表多个打开的窗口中,被screen -r后面一个数字1,2,3 ...在屏幕上的该列表。
user18099

Answers:


91

这里涉及两个级别的“列表”。首先,您在单个会话中具有“窗口列表”,这是ctrl-A A的作用;其次,还有一个“会话列表”,这是您粘贴在问题中的内容,也可以使用来查看screen -ls

您可以使用-S参数来自定义会话名称,否则它将使用您的主机名(teamviggy),例如:

$ screen

(按Ctrl-A d即可分离)

$ screen -S myprogramrunningunderscreen

(按Ctrl-A d即可分离)

$ screen -ls

There are screens on:
    4964.myprogramrunningunderscreen    (05/31/2013 09:42:29 PM)    (Detached)
    4874.pts-1.creeper  (05/31/2013 09:39:12 PM)    (Detached)
2 Sockets in /var/run/screen/S-paul.

另外,您可以使用-S稍后传递给该名称的明确缩写来重新连接:

screen -r myprog

(我已重新连接到myprogramrunningunderscreen会话)


ctrl + aa对您有用吗?我同时按Control + A,然后快速再次按A,没有任何反应。
JohnMerlino 2013年

是; ctrl-A a和之间有区别ctrl-A shift-A。后者促使我这样做Set window's title to:。确保你按shift第二A.
保罗

我执行:“ screen -r 21tweet”并得到响应:“屏幕上显示:3239.21tweet(2015年8月21日上午09:14:35)(附加)没有与21tweet匹配的屏幕可以恢复。” 这可能是什么?
迈克尔

命名屏幕会话的一个不明显的警告是,如果使用命名,则-S在恢复时必须至少在屏幕会话的全名中使用ID号和点号后的唯一缩写,这与自动命名不同。生成的会话名称,您可以在其中包含ID和点。
斯宾塞·威廉姆斯

1
错别字,固定。而且,该站点不允许我在没有其他文本的情况下简短地发表评论。
Paul

37

我遇到了screen -r无法重新安装的情况。添加-d标志,使其看起来像这样

screen -d -r

为我工作。它脱离了先前的屏幕,让我重新连接。有关更多信息,请参见手册页。


12

一种简单的方法是使用以下命令重新连接到任意屏幕

screen -r

然后,在运行屏幕后,您可以通过单击来获得所有活动屏幕的列表Ctrl-A "(即,control-A后跟双引号)。然后,您可以一次选择一个活动屏幕,然后查看它们的运行情况。当然,对屏幕进行命名将使识别正确的屏幕更加容易。

只是我的两分钱


好的,我如何命名屏幕?
奥斯汀

@奥斯汀屏幕-S <sessionname>
Brian

4

我倾向于使用以下组合,需要在多个群集中的多台计算机上工作:

screen -S clusterX

这将创建一个新的屏幕会话,我可以在其中建立环境。

screen -dRR clusterX

这是我随后用来重新连接到该屏幕会话的内容。令人高兴的是,如果会话连接到其他地方,它将分离该其他显示。而且,如果由于某种古怪的原因而没有会话,例如有人在我不知道的情况下重新启动了我的服务器,它将创建一个。最后。如果存在多个会话,则使用第一个。

前一阵子对https://support.dvsus.com/hc/en-us/articles/212925186-Linux-GNU-Screen-instructions表示了很多敬意。

编辑:

另外,这里还有一些man screen关于神秘参数的有用解释

       -d -r   Reattach a session and if necessary detach it first.

       -d -R   Reattach a session and if necessary detach or  even  create  it
               first.

       -d -RR  Reattach  a  session  and if necessary detach or create it. Use
               the first session if more than one session is available.

       -D -r   Reattach a session. If necessary  detach  and  logout  remotely
               first.

还有更多,-D所以请务必检查man screen


2

的输出screen -list格式为pid.tty.host。可以使用pid获取第一个子进程pstree

screen -list|cut -f1 -d'.'|cut -f2|xargs -n 1 pstree -p|grep "^screen"

您将获得像这样的列表

screen(5169)---zsh(5170)---less(15268)
screen(4872)---zsh(4873)-+-cat(11364)
...

1
screen -d -r 4964

要么

screen -d -r 4874

$ screen -ls
There are screens on:
4964.myprogramrunningunderscreen    (05/31/2013 09:42:29 PM)    (Detached)
4874.pts-1.creeper  (05/31/2013 09:39:12 PM)    (Detached)
2 Sockets in /var/run/screen/S-paul.
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.