60

当我执行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 个插槽。

4

6 回答 6

98

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

只杀死分离的屏幕会话(信用@schatten):

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

于 2013-06-20T03:58:54.173 回答
28

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

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

感谢@Rose Perrone、@Milind Shah 和 @schatten

于 2014-05-12T17:16:08.063 回答
10

在你的 .bash_profile 中包含这个函数:

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

要运行它,请调用killd. 这将杀死所有屏幕会话,无论是否分离。

于 2013-01-21T21:00:04.547 回答
2

将 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
}
于 2019-03-20T15:27:14.057 回答
1

如果屏幕死了,请使用:

screen -wipe
于 2017-03-29T17:54:24.753 回答
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,如果使用 -S 标志启动屏幕,则name是主机名或会话名。适用于 OS X 和 Debian,可能不是通用的。

于 2014-05-03T20:28:55.757 回答