杀死所有分离的屏幕会话

问题描述 投票:46回答:6

当我执行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个套接字。

gnu-screen
6个回答
79
投票

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


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


8
投票

在.bash_profile中包含此函数:

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

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


1
投票

如果屏幕已死,请使用:

screen -wipe

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
}

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,可能不是通用的。

© www.soinside.com 2019 - 2024. All rights reserved.