问题描述
我有一个在屏幕下运行的程序。事实上,当我从会话中分离并检查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.
但是我怎么知道哪个是运行我创建的进程的会话?
现在我遇到的一份文件说:
“当您使用窗口时,键入C-a A为其命名。此名称将在窗口列表中使用,并将帮助您记住在开始使用大量窗口时您在每个窗口中所执行的操作。 “
问题是,当我在新的屏幕会话中,我尝试按下控制+ A A,没有任何反应。
最佳解决方案
这里涉及两个级别的”listings”。首先,您在单个会话中拥有”window listing”,这是ctrl-A A所针对的,其次是”session listing”,这是您在问题中粘贴的内容以及使用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
会话)
次佳解决方案
我有一个案例,screen -r
无法重新连接。添加-d
标志,使其看起来像这样
screen -d -r
为我工作。它分离了前一个屏幕,让我重新连接。有关详细信息,请参阅手册页。
第三种解决方案
一种简单的方法是简单地重新连接到任意屏幕
screen -r
然后,一旦运行屏幕,您可以通过点击Ctrl-A "
(即control-A后跟双引号)获得所有活动屏幕的列表。然后,您可以一次选择一个活动屏幕,看看它们正在运行什么。当然,命名屏幕可以更容易地识别正确的屏幕。
只是我的两分钱
第四种方案
我倾向于使用以下组合,我需要在几个集群中的几台机器上工作:
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