I have a program running under screen. In fact, when I detach from the session and check netstat, I can see the program is still running (which is what I want):
udp 0 0 127.0.0.1:1720 0.0.0.0:* 3759/ruby
Now I want to reattach to the session running that process. So I start up a new terminal, and type 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.
But how do I know which one is the session running that process I created?
Now one of the documents I came across said:
"When you're using a window, type C-a A to give it a name. This name will be used in the window listing, and will help you remember what you're doing in each window when you start using a lot of windows."
The thing is when I am in a new screen session, I try to press control+a A and nothing happens.
There are two levels of "listings" involved here. First, you have the "window listing" within an individual session, which is what ctrl-A A is for, and second there is a "session listing" which is what you have pasted in your question and what can also be viewed with
screen -ls
.You can customize the session names with the
-S
parameter, otherwise it uses your hostname (teamviggy), for example:(ctrl-A d to detach)
(ctrl-A d to detach)
As a bonus, you can use an unambiguous abbreviation of the name you pass to
-S
later to reconnect:(I am reconnected to the
myprogramrunningunderscreen
session)I had a case where
screen -r
failed to reattach. Adding the-d
flag so it looked like thisworked for me. It detached the previous screen and allowed me to reattach. See the Man Page for more information.
An easy way is to simply reconnect to an arbitrary screen with
Then once you are running screen, you can get a list of all active screens by hitting
Ctrl-A "
(i.e. control-A followed by a double quote). Then you can just select the active screens one at a time and see what they are running. Naming the screens will, of course, make it easier to identify the right one.I tend to use the following combo where I need to work on several machines in several clusters:
This creates the new screen session where I can build up the environment.
This is what I use subsequently to reattach to that screen session. The nifty bits are that if the session is attached elsewhere, it detaches that other display. Moreover, if there is no session for some quirky reason, like someone rebooted my server without me knowing, it creates one. Finally. if multiple sessions exist, it uses the first one.
Much kudos to https://support.dvsus.com/hc/en-us/articles/212925186-Linux-GNU-Screen-instructions for this tip a while back.
EDIT:
Also here's few useful explanations from
man screen
on cryptic parametersthere is more with
-D
so be sure to checkman screen
The output of
screen -list
is formatted likepid.tty.host
. The pids can be used to get the first child process withpstree
:You will get a list like this
or