Que tal algo como isto:
screen -ls | awk -F. '$NF~"(Attached)" {print "kill -HUP " $1}' | sh
Deixe de fora o | sh
se você quiser ver o que será executado.
Parece funcionar bem em um teste rápido que fiz.
Tenho trabalhado em diferentes sessões de tela em projetos anteriores, por isso tenho algumas sessões de tela acumuladas. Agora me pediram para remover sessões de tela excessivas / desnecessárias da caixa Unix. Nenhum deles são sessões mortas - o status é separado, não morto. O SO é Solaris.
Um dos métodos que me veio à mente é excluir a pasta em que as telas são mantidas na pasta /tmp/mylogin/screen-r/...
, mas não tenho certeza se isso deixaria algum processo extra ou algo passivo no servidor.
Como posso removê-los sem deixar nada para trás?
Além disso, essas telas desanexadas ocupam bastante recursos, o suficiente para alertar o administrador de sistema? Ou seja, existem problemas criados por algumas sessões de tela não utilizadas / desanexadas?
Que tal algo como isto:
screen -ls | awk -F. '$NF~"(Attached)" {print "kill -HUP " $1}' | sh
Deixe de fora o | sh
se você quiser ver o que será executado.
Parece funcionar bem em um teste rápido que fiz.
Eu sei sua velha pergunta, mas aqui está o que eu fiz
Named sessions : when i open screen to have meaningful name id for some stuffs im doing related to superuser.com
# screen -S superuser.com
.. < Ctrl + a + d > ..
# screen -ls
21668.superuser.com (Detached)
21664.otography.com (Detached)
17386.wimbledon (Detached)
17200.unsigned.com (Detached)
16956.tattooremo (Detached)
1082.refinedwater.co.uk (Detached)
27256.apple.com (Detached)
21481.careus.co.uk (Detached)
326.onlinebuziness.me.uk (Detached)
# screen -ls | grep "Detached" | awk '{ print $1; }' | cut -d'.' -f2- | xargs -I {} -n 1 screen -S {} -X quit
# screen -ls
No Sockets found in /var/run/screen/S-root.
Nomes de sessão normais: quando eu simplesmente digito "tela" na sessão de tela de abertura
#screen -ls
There are screens on:
11580.pts-0.server (Detached)
11571.pts-0.server (Detached)
2 Sockets in /var/run/screen/S-root.
# screen -ls | grep "Detached" | awk '{ print $1; }' | cut -d'.' -f1 | xargs -I {} -n 1 screen -S {} -X quit
# screen -ls
No Sockets found in /var/run/screen/S-root.
Lista mostra semelhante a saída abaixo
rajshah@rainbow:~$ screen -ls
There are screens on:
8105.pts-152.rainbow (Detached)
5587.work (Attached)
20462.rajshah (Attached) 3 Sockets in /var/run/screen/S-rajshah.
Como as sessões de tela são armazenadas em / var / run / screen / S - /
Para remover qualquer sessão,
rm -rf /var/run/screen/S-rajshah/8105.pts-152.rainbow
rajshah@rainbow:~$ screen -ls
There are screens on:
5587.work (Attached)
20462.rajshah (Attached) 3 Sockets in /var/run/screen/S-rajshah.
Eu acho que a maneira segura é primeiro matar o processo de tela, em seguida, executar o comando screen com a opção que eu adicionei.
#ps -ef|grep screen|grep -v grep
root 8362 1 0 21:20:38 ? 0:00 screen
# screen -ls
There are screens on:
8363.pts-19. (Dead ???)
8262.8 (Attached)
Remove dead screens with 'screen -wipe'.
2 Sockets in /root/.screen.
#kill -9 8262
# screen -wipe
There are screens on:
8362.pts-19 (Removed)
8263.8 (Removed)
2 sockets wiped out.
Eu tive esse problema com um usuário. Primeiro, executei este comando para ver quantas sessões de tela foram abertas por esse usuário:
*# ps aux | grep username > /detached_screens.txt**
(O comando acima examinará os processos que estão em execução e o comando grep ajudará você a restringir a pesquisa para mostrar apenas os processos executados por esse usuário específico. Após o nome de usuário grep, eu o gravei em um arquivo para referência. Você não precisa usar essa parte) Eu encontrei 278 sessões de tela desanexadas que nunca foram fechadas de meses anteriores. Depois de descobrir o PID para cada tela desanexada, executei o seguinte comando:
*# kill -9 PID PID PID PID PID ...
Isso matou todos os processos que eu especifiquei.
Tags gnu-screen solaris linux unix