Encontrar todas as telas ociosas

2

Eu iniciei alguns processos no passado iniciados por meio do comando screen . A maioria desses scripts já terminou a execução, mas parece que as telas ainda estão ociosas. Eu posso vê-los quando eu faço um ps aux | less para ver todos os processos.

Como posso ver todos os screen s e se há um script ativo em execução neles.

Obrigado

    
por farjam 25.02.2016 / 18:05

3 respostas

3

Para ver a lista atual de telas:

screen -list

A primeira parte do nome da tela é seu PID. Para ver a árvore dos processos atualmente em execução gerados a partir desse processo pai, execute:

pstree <PID>

ou, para um resultado mais detalhado,

pstree -a <PID> | less

Para reconectar a uma tela (e desanexar se ela já estiver anexada em outro lugar), execute:

screen -rd <PID>

Para matar uma tela depois de estabelecida, você não precisa mais dela, você tem algumas opções. Se você está atualmente conectado à tela, você pode simplesmente usar Ctrl + a , k , que matará a tela e todas as suas janelas .

Como alternativa, se você não estiver conectado à sessão, poderá usar:

kill <PID>
screen -wipe <PID>

para eliminá-lo e removê-lo da lista de telas.

    
por 25.02.2016 / 18:32
0

Você pode impedir que screen permaneça ocioso após a conclusão de um script, finalizando o shell quando o script for concluído:

script.sh; exit

Ou, se você quiser ter a chance de ver as mensagens de erro, pode executar

script.sh && exit

Dessa forma, screen só será fechado se script.sh for concluído com êxito.

    
por 25.02.2016 / 18:50
0

Usando este pipe, posso obter uma lista de PIDs correspondentes a telas inativas

screen -list | sed '1d;$d' | sed -r 's/^[^[0-9]]*([0-9]*).*$//' | xargs -n1 pstree -p | sed -r 's/.*bash\(([0-9]+)\)$//' | grep "^[0-9]*$"

Por exemplo:

> screen -list

There are screens on:
    8988.pts-0.ubuntu-1gb-sfo1-01   (07/09/2018 09:02:14 PM)    (Detached)
    8960.pts-0.ubuntu-1gb-sfo1-01   (07/09/2018 09:01:40 PM)    (Detached)
    8927.pts-0.ubuntu-1gb-sfo1-01   (07/09/2018 09:01:02 PM)    (Detached)
    8903.pts-0.ubuntu-1gb-sfo1-01   (07/09/2018 09:00:42 PM)    (Detached)
    8857.pts-0.ubuntu-1gb-sfo1-01   (07/09/2018 08:59:30 PM)    (Detached)
    8831.pts-0.ubuntu-1gb-sfo1-01   (07/09/2018 08:59:01 PM)    (Detached)
6 Sockets in /var/run/screen/S-user.

> screen -list | sed '1d;$d' | sed -r 's/^[^[0-9]]*([0-9]*).*$//' | xargs -n1 pstree -p

screen(8988)───bash(8989)
screen(8960)───bash(8961)
screen(8927)───bash(8928)
screen(8903)───bash(8904)
screen(8857)───bash(8858)───python(8877)───{python}(8881)
screen(8831)───bash(8832)───python(8851)───{python}(8855)

Os primeiros 4 estão inativos, então é questão de escolher esses PIDs, o que pode ser feito com sed -r 's/.*bash\(([0-9]+)\)$//' | grep "^[0-9]*$"

O que é legal nisso é que posso matar todas as telas inativas com uma linha:

screen -list | sed '1d;$d' | sed -r 's/^[^[0-9]]*([0-9]*).*$//' | xargs -n1 pstree -p | sed -r 's/.*bash\(([0-9]+)\)$//' | grep "^[0-9]*$" | xargs -n1 kill
    
por 10.07.2018 / 00:07

Tags