如何杀死所有屏幕?


74

我不小心创建了1000多个屏幕。如何用一个命令杀死它们?(或几个)


3
运行->screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill
sactiw

好主意@sactiw。我对其进行了修改,以使其与命名的会话一起使用,并对命令进行了一些调整,以使其优先级设置,以彻底清除会话,以防它们像对我一样被“卡住”,并再次为用户列出以进行健全性检查:screen -ls | grep "<name>" | cut -d. -f1 | tr --delete "\t" | xargs kill -9; screen -wipe; screen -ls;
Pysis

3
您是如何意外创建1000个屏幕的?
duhaime

Answers:


94

您可以使用 :

pkill screen

要么

killall screen

在OSX中,所有大写字母都称为SCREEN。因此,使用:

pkill SCREEN

要么

killall SCREEN

2
在这种情况下,不建议使用SIGKILL。SIGTERM将是一个更好的选择。
Marco Marco

嗨,Rahul Patil。为什么屏幕未列出Top
user15964 '16

如果我没有权限怎么办?我是否必须手动分别进入和退出所有屏幕?
hipoglucido


6
str=$(screen -ls)  

array=$(echo $str|tr "." "\n")  

for V in $array  
do  
if [ $V -gt 0  ]  
        then screen -S $V -X quit  
fi  
done 

5

最近,我开始熟悉awk,我将其放在一起,并达到了目的。我发布了它,因为它很容易理解。

screen -ls | grep '(Detached)' | awk 'sys {screen -S $1 -X quit}'

其中screen -ls列出了所有当前屏幕。 grep 'pattern'过滤掉所有匹配的行。然后,我们可以获得所有分离屏幕的句柄,并且awk sys {command}可以复制并粘贴命令并使用来执行它sys,这$1是指awk选择的第一个参数。最后,我们使用来执行quit命令screen -X quit


1
screen -ls | grep '(Detached)' | awk '{print $1}' | xargs -I % -t screen -X -S % quit 为我工作得更好。
whereisalext

2

我对您如何创建1000个“屏幕”感到有些困惑。您可能是说1000个屏幕窗口(在一个屏幕会话中有1000个不同的终端窗口)吗?

如果您希望在单个屏幕会话中包含1000个窗口,那么更优雅的解决方案是使用命令C-a \(ctrl-a后跟\)退出屏幕。


1
尝试在屏幕内执行屏幕1000x。怎么了?您将获得1000个屏幕窗口。是的,没错,智能且仁慈的屏幕不会产生1000个屏幕会话。因此,如果OP已经启动了屏幕,则意外启动1000个屏幕窗口要比启动1000个屏幕会话容易得多。
Railgun2

奇怪,但我要回复的评论似乎消失了。无论如何,我让上述评论作为记录。
Railgun2 2013年

1
嗯,这实际上很简单。只需进行一个无限循环(偶然),然后在其中放入类似的内容screen -m sleep 100000。这发生了,直到它已经创建了1000多个屏幕会话,我才注意到。
BrainStone

0

以下命令将终止所有不活动的屏幕:

perl -e 'while (map { kill 9, [split /\./]->[0] } grep { /Detached/ } split /\n/, qx{screen -ls}) { sleep 1 } exec qw(screen -wipe)'

0
for scr in $(screen -ls | awk '{print $1}'); do screen -S $scr -X kill; done
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.