杀死所有分离的屏幕会话

时间:2013-01-21 21:00:05

标签: gnu-screen

当我执行screen -ls时,我会看到以下内容。我如何杀死所有分离的会话?

  

屏幕上有:

    84918.ttys002.ros-mbp   (Detached)

    84944.ttys008.ros-mbp   (Detached)

    84970.ttys013.ros-mbp   (Attached)

    84998.ttys002.ros-mbp   (Detached)

    85024.ttys002.ros-mbp   (Detached) 
     

/var/folders/86/062qtcyx2rxbnmn8mtpkyghs0r0r_z/T/.screen中的5个套接字。

6 个答案:

答案 0 :(得分:78)

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

杀掉仅分离屏幕会话(credit @schatten):

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

答案 1 :(得分:24)

这是一个结合了所有答案的解决方案:将其添加到.bashrc.bash_profile

killscreens () {
    screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill
}
  • 这是一个方便的功能,易于记忆
  • 只杀死分离的屏幕,阻止你做一些愚蠢的事情
  • 请记得打开一个新的bash终端或运行source .bashrc以使killscreens可用

感谢@Rose Perrone,@ Mirind Shah和@schatten

答案 2 :(得分:8)

在.bash_profile中包含此功能:

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

要运行它,请致电killd。这将终止所有屏幕会话,分离与否。

答案 3 :(得分:1)

如果屏幕已关闭,请使用:

screen -wipe

答案 4 :(得分:1)

将Edward Newell和Rose Perrone的解决方案组合成更具可读性和“屏幕”风格的解决方案。

在下方添加到您的.bashrc.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
}

答案 5 :(得分:0)

'[0-9]\{3,\}'

的情况

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

将匹配20505和2014年,退出2014将返回“未找到屏幕会话。”

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

可能有用。

我一直遇到模式20505. name ,其中 name 是主机名或会话名称,如果使用-S标志启动了屏幕。适用于OS X和Debian,可能不是通用的。