Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Sometimes my script bugs out and multiple screen sessions with the same name get created. Is there a way to kill all of these with this name in one command?

Rx:/scripts# screen -S haydoz-script -X quit
There are several suitable screens on:
        13372.haydoz-script     (09/10/11 07:44:05)     (Detached)
        12287.haydoz-script     (09/10/11 07:30:45)     (Detached)
        12230.haydoz-script     (09/10/11 07:17:42)     (Detached)
        7824.haydoz-script      (09/09/11 11:42:26)     (Detached)
        7764.haydoz-script      (09/09/11 11:35:40)     (Detached)
        15753.haydoz-script     (09/04/11 15:00:27)     (Detached)
        15744.haydoz-script     (09/04/11 15:00:26)     (Detached)

There are other screens running besides these ones that I do not want to kill.

share|improve this question

migrated from stackoverflow.com Sep 10 '11 at 12:02

This question came from our site for professional and enthusiast programmers.

up vote 7 down vote accepted

If there are no other screen sessions running you can use the "hard" way and just kill them with killall screen.

If you want to be nice you can iterate over your list of screen sessions and kill them one after another:

# screen -S foo && screen -S foo
# screen -ls
There are screens on:                                                                                                                                                                                      
        8350.foo        (Detached)                                                                                                                                                                         
        8292.foo        (Detached)                                                                                                                                                                         
2 Sockets in /tmp/screens/S-joschi.                                                                                                                                                                        

# This is the interesting line. Just replace "foo" with the name of your session(s)
# for session in $(screen -ls | grep -o '[0-9]*\.foo'); do screen -S "${session}" -X quit; done
# screen -ls
No Sockets found in /tmp/screens/S-joschi.
share|improve this answer
unfortunately, there are other screens that I don't want killed. – Kevin Duke Sep 10 '11 at 8:39
That's why I also provided a "nice" version. ;) – joschi Sep 10 '11 at 8:41
ohhh i didn't see that, thanks! – Kevin Duke Sep 10 '11 at 8:45
The 'nice' version doesn't work for me – Jack Nicholson Jul 18 at 22:26

screen -ls "$SESSION_NAME" lists the full names of matching sessions on tab-indented lines. So you can iterate on these lines, extract the full names, and call the quit command on each matching name.

screen -ls "$SESSION_NAME" | (
  IFS=$(printf '\t');
  sed "s/^$IFS//" |
  while read -r name stuff; do
      screen -S "$name" -X quit
share|improve this answer
What is stuff? – user53145 May 12 at 4:03
@user53145 The variable that contains words of the output from screen -ls after the first which is the session name. If you wrote read -r name stuff then name would contain the whole line (except the leading spaces), but we only want the first word. – Gilles May 12 at 7:30
What type of file is this? How do I run it. Typing it in console won't work – Jack Nicholson Jul 18 at 22:23
@JackNicholson This is a shell snippet. It should run on any sh-style shell (dash, bash, ksh, zsh, …). – Gilles Jul 18 at 22:52
Thank you I'm amazed your code worked! Had trouble with this for ages. Thank you. I ended up putting it in a .sh file and running sh kill.sh – Jack Nicholson Jul 19 at 8:11

Attach to screen and then run another screen command:

screen -x "Name" -x -X kill
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.