How to list running screen sessions?
LinuxBashCommand LineGnu ScreenLinux Problem Overview
I have a bunch of servers, on which I run experiments using screen
. The procedure is the following :
ssh
to server XXX- launch
screen
- start experiments in a few tabs
- detach
screen
- disconnect from the server
While the experiments are running, I can easily find on which servers they are by ssh
ing 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.
> 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"