Como eu mato todas as telas?


76

Eu acidentalmente criei mais de 1000 telas. Como eu mato todos eles com um comando? (Ou alguns)


3
executar ->screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill
sactiw

Boa ideia @sactiw. Modifiquei-o para trabalhar com minhas sessões nomeadas e ajustei um pouco os comandos, de preferência, limpando completamente as sessões, caso elas fiquem 'presas' como estavam para mim, e listando novamente para o usuário como verificação de sanidade:screen -ls | grep "<name>" | cut -d. -f1 | tr --delete "\t" | xargs kill -9; screen -wipe; screen -ls;
Pysis

3
Como você criou acidentalmente 1000 telas?
Duhaime

Respostas:


95

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

2
Não é recomendável usar o SIGKILL neste caso. SIGTERM seria uma escolha muito melhor.
Marco

Olá, Rahul Patil. por que a tela não está listada emTop
user15964

E se eu não tiver permissões? Preciso entrar e sair manualmente de todas as telas individualmente?
hipoglucido

13

Se as telas estiverem inoperantes, use:

screen -wipe

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

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 -lslista 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, $1refere-se ao primeiro argumento escolhido pelo awk. Finalmente, executamos o comando quit com screen -X quit.


11
screen -ls | grep '(Detached)' | awk '{print $1}' | xargs -I % -t screen -X -S % quit funcionou melhor para mim.
whereisalext

2

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 \).


11
Tente executar a tela 1000x na tela. O que acontece? Você recebe 1000 janelas de tela. Sim, isso mesmo, a tela de maneira inteligente e misericordiosa não gera 1000 sessões de tela. Portanto, se o OP já havia iniciado a tela, seria muito mais fácil iniciar acidentalmente 1000 janelas de tela do que iniciar 1000 sessões de tela.
Railgun2

Estranho, mas o comentário ao qual eu estava respondendo parece ter desaparecido. De qualquer forma, estou deixando o comentário acima representar o registro.
Railgun2

11
Bem, na verdade é bem simples. Basta fazer um loop infinito (por acidente) e colocar algo assim lá screen -m sleep 100000. Isso aconteceu e eu não percebi até que ele já tivesse criado mais de 1000 sessões de tela.
21313 BrainStone

0

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)'

0
for scr in $(screen -ls | awk '{print $1}'); do screen -S $scr -X kill; done
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.