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


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.