杀死所有分离的屏幕会话

Ros*_*one 49 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) 
Run Code Online (Sandbox Code Playgroud)

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

小智 83

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

  • 好的解决方案,谢谢.但它也杀死附加的会话.我使用了这个`屏幕-ls | grep已分离| 切-d.-f1 | awk'{print $ 1}'| xargs杀死` (37认同)
  • @MusséRedi`screen-ls` - 不会启动新屏幕,但会列出所有屏幕会话; `grep Detached` - 分离的会话在前一个输出中标记为'Detached'; `cut -d.-f1` - 将每个字符串拆分为"."( - d.),然后只选择第一个部分(-f1),这样我们只有pid可能的前导空格; `awk {print $ 1}` - 它读取输入行并按空格分割,所以基本上在这种情况下它只删除前导空格; `xargs kill` - 使用来自stdin的附加参数运行`kill` cmd,因此对于每一行你都会得到一个`kill <pid>`. (7认同)
  • 如果你在Linux机器上,而不是Apple,你需要`screen -ls | grep已分离| 切-d.-f1 | awk'{print $ 1}'| 如果没有当前屏幕运行,xargs -r kill`可以防止命令错误(在bash脚本中特别有用) (2认同)

Edw*_*ell 25

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

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

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


Ros*_*one 8

在.bash_profile中包含此函数:

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

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

  • 那应该是''[0-9]\{3,\}'` (3认同)