Killing várias sessões de tela GNU com o mesmo nome

6

Às vezes, meu script é excluído e várias sessões de tela com o mesmo nome são criadas. Existe uma maneira de matar todos estes com este nome em um comando?

Rx:/scripts# screen -S haydoz-script -X quit
There are several suitable screens on:
        13372.haydoz-script     (09/10/11 07:44:05)     (Detached)
        12287.haydoz-script     (09/10/11 07:30:45)     (Detached)
        12230.haydoz-script     (09/10/11 07:17:42)     (Detached)
        7824.haydoz-script      (09/09/11 11:42:26)     (Detached)
        7764.haydoz-script      (09/09/11 11:35:40)     (Detached)
        15753.haydoz-script     (09/04/11 15:00:27)     (Detached)
        15744.haydoz-script     (09/04/11 15:00:26)     (Detached)

Existem outras telas além dessas que eu não quero matar.

    
por dukevin 10.09.2011 / 10:21

4 respostas

10

Se não houver outras sessões com screen em execução, você poderá usar a maneira "difícil" e apenas kill com killall screen .

Se você quer ser legal, pode repetir a lista de sessões de tela e matá-las uma após a outra:

# screen -S foo && screen -S foo
[detached]
[detached]
# screen -ls
There are screens on:                                                                                                                                                                                      
        8350.foo        (Detached)                                                                                                                                                                         
        8292.foo        (Detached)                                                                                                                                                                         
2 Sockets in /tmp/screens/S-joschi.                                                                                                                                                                        

# This is the interesting line. Just replace "foo" with the name of your session(s)
# for session in $(screen -ls | grep -o '[0-9]*\.foo'); do screen -S "${session}" -X quit; done
# screen -ls
No Sockets found in /tmp/screens/S-joschi.
    
por 10.09.2011 / 10:31
4

screen -ls "$SESSION_NAME" lista os nomes completos das sessões correspondentes nas linhas recuadas por guias. Assim, você pode iterar nessas linhas, extrair os nomes completos e chamar o comando quit em cada nome correspondente.

SESSION_NAME='haydoz-script'
screen -ls "$SESSION_NAME" | (
  IFS=$(printf '\t');
  sed "s/^$IFS//" |
  while read -r name stuff; do
      screen -S "$name" -X quit
  done
)
    
por 10.09.2011 / 22:41
0

Aqui está o one-liner. Você precisa substituir your_session pelo necessário.

screen -ls your_session | grep -E '\s+[0-9]+\.' | awk -F ' ' '{print $1}' | while read s; do screen -XS $s quit; done

    
por 11.11.2018 / 04:18
-2

Anexar a tela e depois executar outro comando de tela:

screen -x "Name" -x -X kill
    
por 28.08.2013 / 10:18