退出与SSH相同的名称屏幕

我有一个服务器,几个屏幕开始。 这是什么显示当我使用screen -ls

  There are screens on: 12811.screen (Detached) 2061.screen (Detached) 7055.screen (Detached) 11746.screen (Detached) 11740.realscreen (Detached) 11740.screen (Detached) 6 Sockets in /var/run/screen/S-root. 

我一直试图在同一时间退出所有屏幕同名。 我知道我可以一次用killall屏幕退出所有的屏幕,但是这会杀死每一个屏幕,我只想退出同名的屏幕。

有一个bash文件,我将能够使用,这将遍历所有的屏幕,并退出它们? 还是有另一种方法,我可以退出同名的所有屏幕?

这样的事情可以做到这一点,parsing出screen -ls输出,只匹配具有相同名称的屏幕,并发送一个杀手:

 SCREENSTOKILL="screen" screen -ls | egrep "\.${SCREENSTOKILL}[[:space:]]+\(Detached\)" | cut -d. -f1 | xargs kill 

或者你可以获取所有的父屏幕进程ID(我版本的屏幕上的subprocess的全部大写都有全名),排除你想忽略的进程,然后杀掉其余的进程:

 pgrep -f screen | grep -v '11740' | xargs kill 

尝试这个:

 pkill -f 'SCREEN.*\<screen\>' 

它将所有屏幕会话与“屏幕”作为完整的进程命令行中的一个单独的词来查找。 它将杀死第一个和第三个进程,但不是第二个进程,如ps输出示例所示:

 dennis 25514 0.0 0.1 4216 1364 ? Ss 17:04 0:00 SCREEN -S screen dennis 25609 0.0 0.1 4216 1364 ? Ss 17:04 0:00 SCREEN -S realscreen dennis 25702 0.0 0.1 4216 1360 ? Ss 17:04 0:00 SCREEN -S screen 

如果你有一个名为“真正的屏幕”或“real.screen”的screen会话,它也将杀死他们。 但是,您可以根据需要使用特定的正则expression式。