Kill all detached screen sessions

前端 未结 6 1702
时光取名叫无心
时光取名叫无心 2021-01-29 20:47

When I execute screen -ls, I see the following. How can I kill all the detached sessions?

There are screens on:

    84918.tty         


        
相关标签:
6条回答
  • 2021-01-29 21:07

    screen -ls | grep pts | cut -d. -f1 | awk '{print $1}' | xargs kill

    Kill only Detached screen sessions (credit @schatten):

    screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill

    0 讨论(0)
  • 2021-01-29 21:21

    Include this function in your .bash_profile:

    killd () {
        for session in $(screen -ls | grep -o '[0-9]\{4\}')
        do
            screen -S "${session}" -X quit;
        done
    }
    

    To run it, call killd. This will kill all screen sessions, detached or not.

    0 讨论(0)
  • 2021-01-29 21:26

    Combining Edward Newell's and Rose Perrone's solutions into a more readable and "screen" like solution.

    Add below to your .bashrc or .bash_profile.

    # function for killing all detached screen sessions
    killds() {
        detached_sessions=$(screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}')
        for s in ${detached_sessions}
        do
            screen -S "${s}" -X quit;
        done
    }
    
    0 讨论(0)
  • 2021-01-29 21:26
    '[0-9]\{3,\}'
    

    in case of

    There is a screen on:
    20505.blabla    (03/05/2014 22:16:25)   (Detached)
    1 Socket in /var/run/screen/S-blabla.
    

    will match both 20505 and 2014, where quitting 2014 will return "No screen session found."

    [0-9]\{3,\}\.\S*
    

    might work.

    I've always encountered pattern 20505.name, where name is either host name or session name if screen was launched with -S flag. Works on OS X and Debian, might not be universal.

    0 讨论(0)
  • 2021-01-29 21:31

    If the screens are dead, use:

    screen -wipe
    
    0 讨论(0)
  • 2021-01-29 21:34

    Here's a solution that combines all the answers: Add this to your .bashrc or .bash_profile:

    killscreens () {
        screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill
    }
    
    • this is a convenient function, easy to remember
    • kills only the detached screens, to stop you from doing something dumb
    • remember to open a new bash terminal or run source .bashrc to make killscreens available

    Thanks to @Rose Perrone, @Milind Shah, and @schatten

    0 讨论(0)
提交回复
热议问题