Search code examples
linuxbashcommand-linegnu-screen

How to list running screen sessions?


I have a bunch of servers, on which I run experiments using screen. The procedure is the following :

  1. ssh to server XXX
  2. launch screen
  3. start experiments in a few tabs
  4. detach screen
  5. disconnect from the server

While the experiments are running, I can easily find on which servers they are by sshing to all servers and listing my running processes (using top or ps).

However, once the experiments are finished, how could I find on which servers I have a screen session opened (so that I can have a look at the output, relaunch them, etc.) ?

PS: my experiments do print their output to files, too... but this is not the point of my question.


Solution

  • To list all of the screen sessions for a user, run the following command as that user:

    screen -ls
    

    To see all screen sessions on a specific machine you can do:

    ls -laR /var/run/screen/
    

    I get this on my machine:

    gentle ~ # ls -laR /var/run/screen/
    
    /var/run/screen/:
    total 1
    drwxrwxr-x  4 root utmp   96 Mar  1  2005 .
    drwxr-xr-x 10 root root  840 Feb  1 03:10 ..
    drwx------  2 josh users  88 Jan 13 11:33 S-josh
    drwx------  2 root root   48 Feb 11 10:50 S-root
    
    /var/run/screen/S-josh:
    total 0
    drwx------ 2 josh users 88 Jan 13 11:33 .
    drwxrwxr-x 4 root utmp  96 Mar  1  2005 ..
    prwx------ 1 josh users  0 Feb 11 10:41 12931.pts-0.gentle
    
    /var/run/screen/S-root:
    total 0
    drwx------ 2 root root 48 Feb 11 10:50 .
    drwxrwxr-x 4 root utmp 96 Mar  1  2005 ..
    

    This is a rather brilliantly Unixy use of Unix Sockets wrapped in filesystem permissions to handle security, state, and streams.