Как мне убить все экраны?

76

Я случайно создал более 1000 экранов. Как мне убить их всех одной командой? (Или несколько)

BrainStone
источник
3
беги ->screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill
священный праздник
Хорошая идея @sactiw. Я изменил его, чтобы он работал с моими именованными сессиями, и немного подправил команды для предпочтения, полностью screen -ls | grep "<name>" | cut -d. -f1 | tr --delete "\t" | xargs kill -9; screen -wipe; screen -ls;
очистив
3
Как вы случайно создали 1000 экранов?
Духайме

Ответы:

95

Вы можете использовать :

pkill screen

Или же

killall screen

В OSX процесс называется SCREEN во всех заглавных буквах. Итак, используйте:

pkill SCREEN

Или же

killall SCREEN
Рахул Патил
источник
2
Не рекомендуется использовать SIGKILL в этом случае. SIGTERM был бы намного лучшим выбором.
Марко
Привет, Рахул Патил. почему экран не указан вTop
user15964
Что делать, если у меня нет разрешений? Нужно ли вручную входить и выходить из всех экранов по отдельности?
hipoglucido
13

Если экраны не работают, используйте:

screen -wipe
Adam_G
источник
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.

Eliassen
источник
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, а затем \).

Railgun2
источник
1
Попробуйте выполнить экран 1000x внутри экрана. Что происходит? Вы получаете 1000 окон экрана. Да, верно, экран разумно и к счастью не порождает 1000 сеансов экрана. Таким образом, если OP уже запустил экран, то было бы гораздо проще случайно запустить 1000 экранных окон, чем запустить 1000 экранных сессий.
Рейлган2
Странно, но комментарий, на который я отвечал, похоже, исчез. В любом случае, я оставляю комментарий выше для записи.
Рейлган2
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
user370823
источник