我有一个程序在 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)
...