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


76

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


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


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 экранных сессий.
Рейлган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)'

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.