kill a screen (but not all screens)
I have multiple screens running on an Ubuntu server that are initiated as:
screen -dmS screen1 cmd
screen -dmS screen2 cmd
etc...
And I need to kill one screen, but not all of them. What is the correct command to kill a single particular screen with its name? I've read through the man pages but I can't seem to find the command I am looking for.
Also I want to write this command into a bash script so I can't simply screen -r screen1
then press Ctrl+X as I normally would.
Solution 1:
From the man page :
-X Send the specified command to a running screen session. You can
use the -d or -r option to tell screen to look only for attached
or detached screen sessions. Note that this command doesn't work
if the session is password protected.
You can do :
screen -X -S <sessionid> kill
Solution 2:
If you do a screen -list
, you'll notice that each screen name begins with a number, which is the PID of the screen:
$ screen -list
There are screens on:
12281.pts-1.jonah (12/21/2009 07:53:19 PM) (Attached)
10455.pts-1.jonah (12/19/2009 10:55:25 AM) (Detached)
2 Sockets in /var/run/screen/S-raphink.
From there, just send a KILL signal to this specific PID:
$ kill 12281
and it will kill the specific screen.
Solution 3:
If you have several screens with the same name, you can kill them at once:
screen -ls | egrep "^\s*[0-9]+.ScreenName" | awk -F "." '{print $1}' | xargs kill
-
Command
screen -ls
prints screens with their process number. For example, 4773.test is a screen with process number 4773 and the name test. Sample output:6322.ss (05/23/2018 10:39:08 AM) (Detached) 6305.sc (05/23/2018 10:38:40 AM) (Detached) 6265.ScreenName (05/23/2018 10:37:59 AM) (Detached) 6249.ScreenName (05/23/2018 10:37:50 AM) (Detached) 6236.scc (05/23/2018 10:37:42 AM) (Detached)
Command
egrep
filters above sample text sent via piped line |.- Command
awk -F "." '{print $1}'
extracts first column of each line. Delimiter between columns is defined as dot (.) by option -F - Finally command
xargs kill
will kill all process whose numbers sent via pipe |.xargs
is used when we want to execute a command on each of inputs.
Solution 4:
defraagh's solution doesn't work for me, however I can kill the screen session using Raphink's idea:
screen -list get the process ID
kill -9 PROCESSID
screen -wipe SESSIONID