Costumo usar a tela quando faço logon nos nós interativos em um supercomputador ao qual tenho acesso - e costumo executar as coisas e seguir em frente. Existem cerca de 20 nós separados nos quais posso fazer login; e se eu verificar algum deles, terei algo como 4 sessões desanexadas. Cada uma dessas sessões terá talvez 5 sessões de tela dentro disso.
Existe uma maneira rápida de percorrer tudo isso e fechá-lo se eles não estiverem executando nenhum processo? Meu processo atual é screen -ls
e, em seguida screen -r ####
, digite exit
até voltar à tela base.
EDITAR
Aqui está um script que eu baseei na resposta de Thor:
for screen_pid in $(screen -ls | sed -nr 's/^\t+([0-9]+).*/\1/p');
do
for shell_tty in $(ps h --ppid $screen_pid -o tty);
do
number_of_processes=$(ps a -o tty | grep $shell_tty | wc -l)
if (( number_of_processes > 1 )); then
echo number $number_of_processes
else
# screen -S $screen_pid -X kill
screen -S $screen_pid -X quit
fi
done
done
Quando eu corro com kill, nada parece acontecer com as sessões. Quando eu corro com quit, parece matar toda a sessão e qualquer coisa em execução dentro (sem verificar se há processos em execução). Ajustes a partir daqui?
Ctrl-d
para sair o aceleraria.