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

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

我有一个程序在 screen 下运行。实际上,当我脱离会话并检查 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 为其命名。此名称将用于窗口列表中,并帮助您在开始使用大量窗口时记住您在每个窗口中所做的事情。”

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

答案1

这里涉及两个级别的“列表”。首先,您有单个会话中的“窗口列表”,这是 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会话)

答案2

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

screen -d -r

对我来说很管用。它拆下了之前的屏幕并允许我重新连接。有关更多信息,请参阅手册页。

答案3

一个简单的方法是简单地重新连接到任意屏幕

screen -r

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

答案4

的输出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)
...

相关内容