Я случайно создал более 1000 экранов. Как мне убить их всех одной командой? (Или несколько)
screen -ls | grep "<name>" | cut -d. -f1 | tr --delete "\t" | xargs kill -9; screen -wipe; screen -ls;
Я случайно создал более 1000 экранов. Как мне убить их всех одной командой? (Или несколько)
screen -ls | grep "<name>" | cut -d. -f1 | tr --delete "\t" | xargs kill -9; screen -wipe; screen -ls;
Ответы:
Вы можете использовать :
pkill screen
Или же
killall screen
В OSX процесс называется SCREEN во всех заглавных буквах. Итак, используйте:
pkill SCREEN
Или же
killall SCREEN
Top
Недавно начали знакомиться с 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
.
screen -ls | grep '(Detached)' | awk '{print $1}' | xargs -I % -t screen -X -S % quit
работал лучше для меня.
Я немного озадачен тем, как вам удалось создать 1000 «экранов». Возможно, вы имели в виду 1000 экранных окон (1000 различных окон терминала за один сеанс экрана)?
Если вы имели в виду 1000 окон в рамках одного сеанса экрана, то более элегантным решением было бы выйти из экрана с помощью команды C-a \
(ctrl-a, а затем \).
screen -m sleep 100000
. Это произошло, и я не заметил, пока он не создал более 1000 сеансов экрана.
for scr in $(screen -ls | awk '{print $1}'); do screen -S $scr -X kill; done
screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill