Eu acidentalmente criei mais de 1000 telas. Como eu mato todos eles com um comando? (Ou alguns)
screen -ls | grep "<name>" | cut -d. -f1 | tr --delete "\t" | xargs kill -9; screen -wipe; screen -ls;
Eu acidentalmente criei mais de 1000 telas. Como eu mato todos eles com um comando? (Ou alguns)
screen -ls | grep "<name>" | cut -d. -f1 | tr --delete "\t" | xargs kill -9; screen -wipe; screen -ls;
Respostas:
Você pode usar :
pkill screen
Ou
killall screen
No OSX, o processo é chamado de TELA em todas as maiúsculas. Então, use:
pkill SCREEN
Ou
killall SCREEN
Top
Recentemente, comecei a me familiarizar com o awk. Eu juntei isso e ele serviu ao seu propósito. Eu postei, pois é muito fácil de entender.
screen -ls | grep '(Detached)' | awk 'sys {screen -S $1 -X quit}'
Onde screen -ls
lista todas as telas atuais.
grep 'pattern'
filtra todas as linhas correspondentes. Podemos então obter um identificador para todas as telas desanexadas e, com awk sys {command}
isso, podemos copiar e colar um comando e executá-lo com sys
, $1
refere-se ao primeiro argumento escolhido pelo awk. Finalmente, executamos o comando quit com screen -X quit
.
screen -ls | grep '(Detached)' | awk '{print $1}' | xargs -I % -t screen -X -S % quit
funcionou melhor para mim.
Estou um pouco confuso sobre como você conseguiu criar 1000 "telas". Você talvez quis dizer 1000 janelas de tela (1000 janelas de terminal diferentes em uma única sessão de tela)?
Se você quisesse 1000 janelas em uma sessão de tela única, uma solução mais elegante seria sair da tela usando o comando C-a \
(ctrl-a seguido por \).
screen -m sleep 100000
. Isso aconteceu e eu não percebi até que ele já tivesse criado mais de 1000 sessões de tela.
O comando a seguir encerrará todas as telas inativas:
perl -e 'while (map { kill 9, [split /\./]->[0] } grep { /Detached/ } split /\n/, qx{screen -ls}) { sleep 1 } exec qw(screen -wipe)'
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