【问题标题】:Kill all detached screen sessions杀死所有分离的屏幕会话
【发布时间】:2013-01-05 00:12:56
【问题描述】:

当我执行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


【解决方案1】:

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

【讨论】:

  • 很好的解决方案,谢谢。但它也会杀死附加的会话。我用过这个screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill
  • @schatten 您能否分别解释每个管道的命令的工作原理?
  • @MusséRedi screen -ls - 不启动新屏幕,但列出所有屏幕会话; grep Detached – 分离的会话在之前的输出中被标记为“分离”; cut -d. -f1 - 用 "."(-d.) 分割每个字符串,然后只选择第一部分 (-f1),这样我们只有 pid 可能有前导空格; awk {print $1} - 它读取输入行并用空格分隔,所以基本上在这种情况下它只是删除前导空格; xargs kill - 运行 kill cmd 并附加来自标准输入的参数,因此对于每一行,您都会得到一个 kill <pid>
  • 如果您使用的是 Linux 机器,而不是 Apple,则需要 screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs -r kill 以防止在没有当前屏幕运行时出现命令错误(在 bash 脚本中特别有用)
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • 应该是'[0-9]\{3,\}'
    • 优雅的解决方案,一个很好的解决方案
    【解决方案4】:

    将 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】:

      如果屏幕死了,请使用:

      screen -wipe
      

      【讨论】:

        【解决方案6】:
        '[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,可能不是通用的。

        【讨论】:

          猜你喜欢
          • 2010-12-03
          • 1970-01-01
          • 2012-03-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-08
          • 2019-08-18
          • 1970-01-01
          相关资源
          最近更新 更多