Kill all detached screen sessions

随声附和 提交于 2019-12-02 14:04:24
Milind Shah

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

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

Rose Perrone

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.

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
}

If the screens are dead, use:

screen -wipe
'[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.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!