How to list running screen sessions?

LinuxBashCommand LineGnu Screen

Linux Problem Overview


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.

Linux Solutions


Solution 1 - Linux

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.

Solution 2 - Linux

The command screen -list may be what you want.

See the man

Solution 3 - Linux

While joshperry's answer is correct, I find very annoying that it does not tell you the screen name (the one you set with -t option), that is actually what you use to identify a session. (not his fault, of course, that's a screen's flaw)

That's why I instead use a script such as this: ps auxw|grep -i screen|grep -v grep

Solution 4 - Linux

I'm not really sure of your question, but if all you really want is list currently opened screen session, try:

screen -ls

Solution 5 - Linux

Simple guide to remember...

screen - To create a screen

screen -list - List all the detached (running) screens with their screen IDs.

enter image description here in this picture -

> 6764.pts-1.v1091330

is a screen ID.

screen -x [screen id] - Connect / Attach to a specific running screen.

Ctrl + D - while in a screen to Terminate / Stop a screen from running.

Ctrl + A, Then press D - while in a screen to detach from screen without disturbing it.

killall screen - Detach or terminate all screens.

Solution 6 - Linux

 For windows system
  
 Open putty 
 then login in server

If you want to see screen in Console then you have to write command

 Screen -ls

if you have to access the screen then you have to use below command

 screen -x screen id

Write PWD in command line to check at which folder you are currently

Solution 7 - Linux

In most cases a screen -RRx $username/ will suffice :)

If you still want to list all screens then put the following script in your path and call it screen or whatever you like:

#!/bin/bash
if [[ "$1" != "-ls-all" ]]; then
    exec /usr/bin/screen "$@"
else
    shopt -s nullglob
    screens=(/var/run/screen/S-*/*)
    if (( ${#screens[@]} == 0 )); then
        echo "no screen session found in /var/run/screen"
    else
        echo "${screens[@]#*S-}"
    fi
fi

It will behave exactly like screen except for showing all screen sessions, when giving the option -ls-all as first parameter.

Solution 8 - Linux

Multiple folks have already pointed that

$ screen -ls

would list the screen sessions.

Here is another trick that may be useful to you.

If you add the following command as a last line in your .bashrc file on server xxx, then it will automatically reconnect to your screen session on login.

screen -d -r

Hope you find it useful.

Solution 9 - Linux

You could use the below commands.

screen -list

(or)

screen -R

Solution 10 - Linux

> ps x | grep SCREEN

to see what is that screen running in case you used the command

> screen -A -m -d php make_something.php

Solution 11 - Linux

So you're using screen to keep the experiments running in the background, or what? If so, why not just start it in the background?

./experiment &

And if you're asking how to get notification the job i done, how about stringing the experiment together with a mail command?

./experiment && echo "the deed is done" | mail youruser@yourlocalworkstation -s "job on server $HOSTNAME is done"

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionWookaiView Question on Stackoverflow
Solution 1 - LinuxjoshperryView Answer on Stackoverflow
Solution 2 - LinuxZoredacheView Answer on Stackoverflow
Solution 3 - Linuxo0'.View Answer on Stackoverflow
Solution 4 - LinuxskinpView Answer on Stackoverflow
Solution 5 - LinuxMBKView Answer on Stackoverflow
Solution 6 - LinuxAnkit jainView Answer on Stackoverflow
Solution 7 - LinuxObiWahnView Answer on Stackoverflow
Solution 8 - LinuxsamuraiView Answer on Stackoverflow
Solution 9 - LinuxSuperNovaView Answer on Stackoverflow
Solution 10 - Linuxuser9553510View Answer on Stackoverflow
Solution 11 - LinuxJosefAssadView Answer on Stackoverflow