Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

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
add comment

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

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

3 Answers

up vote 5 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
[detached]
[detached]
# 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
add comment

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.

SESSION_NAME='haydoz-script'
screen -ls "$SESSION_NAME" | (
  IFS=$(printf '\t');
  sed "s/^$IFS//" |
  while read -r name stuff; do
      screen -S "$name" -X quit
  done
)
share|improve this answer
add comment

Attach to screen and then run another screen command:

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

Your Answer

 
discard

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.