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

评论

运行->屏幕-ls | grep分离|切-d。 -f1 | awk'{print $ 1}'| xargs kill

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

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

#1 楼

您可以使用:

pkill screen




killall screen




在OSX中,该过程称为SCREEN大写。因此,请使用:

pkill SCREEN




killall SCREEN


评论


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

–马可
13-10-10在22:31

嗨,Rahul Patil。为什么屏幕未在顶部列出

–user15964
16-4-30的1:03

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

–hipoglucido
17年6月21日在15:39

#2 楼

如果屏幕死了,请使用:

screen -wipe


#3 楼

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

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

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

评论


屏幕-ls | grep'(分离)'| awk'{print $ 1}'| xargs -I%-t屏幕-X -S%退出对我来说效果更好。

– whereisalext
19-09-22在23:24



#4 楼

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 楼

for scr in $(screen -ls | awk '{print }'); do screen -S $scr -X kill; done


#6 楼

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

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

评论


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

–Railgun2
13-10-11在1:44

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

–Railgun2
13-10-11在1:49

嗯,这实际上很简单。只是做一个无限循环(偶然),然后在屏幕上放类似的东西-m sleep100000。这发生了,直到它已经创建了1000个屏幕会话,我才注意到。

– BrainStone
13-10-11在10:14

#7 楼

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

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


评论


这个作品。

– StephenBoesch
20-2-18在18:40