Matar sessão de tela desanexada [fechada]

864

Aprendi em algum lugar que uma tela separada pode ser eliminada por

screen -X -S [session # you want to kill] kill

onde [sessão # você quer matar] pode ser obtida

screen -ls

Mas isso não funciona. Algo errado? Qual é o caminho correto?

Tim
fonte
25
"em algum lugar" nem sempre é uma boa fonte de informação. Tente "tela do homem".
InnaM 02/10/2009
27
O comando correto éscreen -S sessionname -p 0 -X quit
jimmetry
killall - # ecrã [# = número de telas que você quer matar]
CArnold
Eu simplesmente uso exit
TPArrow
CTRL + D quando na tela é o comando mais fácil.
28619 Don King

Respostas:

1267

"matar" mata apenas uma janela da tela. Para "matar" a sessão completa, use quit.

Exemplo

$ screen -X -S [session # you want to kill] quit

Para sessões mortas, use: $ screen -wipe

innaM
fonte
112
digite 'exit' (sem as aspas) no ubuntu: P
mzalazar 23/01
16
exitfunciona, mas precisa ser digitado em cada tela que foi aberta. quitnem funciona
kapad
4
@kapad realmente parar obras se você escrevê-lo em linha X -S pid / sockname sair
Eduard
20
no OSX entrar screen -X quitem nenhum termina terminais todas as sessões ativas
Michel
5
Ctrl + D também funciona
Yi Xin
499

Você pode matar uma sessão desanexada que não está respondendo dentro da sessão da tela, fazendo o seguinte.

  1. Digite screen -listpara identificar a sessão de tela desanexada.

    ~ $ screen -list  
        Existem telas em:  
             20751.Melvin_Peter_V42 (Independente)  
    

    Nota: 20751.Melvin_Peter_V42é o seu ID de sessão.

  2. Apegue-se à sessão de tela desanexada

    tela -r 20751.Melvin_Peter_V42
  3. Depois de conectado à sessão, pressione Ctrl+ Ae digite:quit

Melvin Peter
fonte
20
você pode simplesmente usar a tela -r 20751 sem o nome completo
Gal Bracha
53
ou: Ctrl + a, k
laffuste 15/11
@laffuste 's comentário funcionou para mim, mas quite :quitlevar a command not foundno meu servidor Linux remoto (talvez diferenças entre versões do sistema operacional ou da tela são os culpados)
Hack-R
uma vez anexado à tela, exittambém funciona
PankajKabra
145

Telas de lista:

screen -list

Resultado:

There is a screen on:
23536.pts-0.wdzee       (10/04/2012 08:40:45 AM)        (Detached)
1 Socket in /var/run/screen/S-root.

Matar sessão de tela:

screen -S 23536 -X quit
nilloc
fonte
1
'screen -ls' também funciona. ;)
Atul Vaibhav 21/11
113

É mais fácil matar uma sessão, quando algum nome significativo é dado:

//Creation:
screen -S some_name proc
// Kill detached session
screen -S some_name -X quit
Hitman_99
fonte
Por que screen -Se não screen -r?
usar o seguinte comando
1
Esta resposta usa o nome da sessão, o que é muito mais conveniente do que procurar o ID. Obrigado!
Paul Kenjora
43

Você pode simplesmente ir para o local em que a sessão de tela está alojada e executar:

 screen -ls

o que resulta em

 There is a screen on:
         26727.pts-0.devxxx      (Attached)
 1 Socket in /tmp/uscreens/S-xxx. <------ this is where the session is.

E basta removê-lo:

  1. cd / tmp / uscreens / S-xxx
  2. ls
  3. 26727.pts-0.devxxx
  4. rm 26727.pts-0.devxxx
  5. ls

O uscreensdiretório não terá mais o 26727.pts-0.devxxxarquivo. Agora, certifique-se de digitar isto:

screen -ls

e você deve obter:

Nenhum soquete encontrado em / tmp / uscreens / S-xxx.

rc2012
fonte
4
Esta é a única solução que funcionará se a tela estiver "travada", ou seja. não está morto, mas não pode ser anexado.
Redreinard
Isso me ajudou quando a tela estava totalmente bloqueada, mas eu precisava encontrar e matar o processo real também. ps aux | grep screenencontrei o pid e emiti um killpara removê-lo. Dependendo do que você executou na tela, também pode haver arquivos temporários e bloqueios para limpar.
Lomky
29
screen -wipe

Deve limpar todas as sessões de tela morta .

Vishv Jeet
fonte
11
O que significa morto? não está executando nenhum programa?
Shihao Xu
1
@ShihaoXu Dead significa que a sessão está inacessível e no localhost (a conexão do soquete está interrompida). - consulte gnu.org/software/screen/manual/screen.html
iBaff 30/06/19
23

adicione isso ao seu ~/.bashrc:

alias cleanscreen="screen -ls | tail -n +2 | head -n -2 | awk '{print $1}'| xargs -I{} screen -S {} -X quit"

Em seguida, use cleanscreenpara limpar todas as sessões da tela.

user2115803
fonte
11
Um simples one-liner:screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill
Ariel
3
Trabalhou um mimo, mas teve que modificá-lo um pouco para o trabalho em OSX: screen -ls | tail +2 | head -2 | awk '{print $1}'| xargs -I{} screen -S {} -X quit
Jonathan
Ligeira melhoria: -screen -ls | grep Anexado | cut -d. -f1 awk '{print $ 1}' | xargs -I {} screen -d {}
Abhay Yadav
21

Para mim um simples

exit

trabalho. Isso é de dentro da sessão da tela.

Nick Desaulniers
fonte
2
também, ctrl + a:quit
Nick Desaulniers
2
também, ctrl + a, então K
Nick Desaulniers
Ou apenas CTRL + D dentro de uma tela
Frederik Witte
16

Para eliminar todas as sessões de tela desanexadas, inclua esta função no seu .bash_profile:

killd () {
for session in $(screen -ls | grep -o '[0-9]\{5\}')
do
screen -S "${session}" -X quit;
done
}

para executá-lo, chame killd

Rose Perrone
fonte
5
Às vezes, não são 5 dígitos, então eu uso: killd () {para a sessão em $ (screen -ls | grep -o '[0-9] \ +') faz a tela -S "$ {session}" -X quit; done}
Kostyantyn 20/05/2013
7
== ISSUE THIS COMMAND
[xxx@devxxx ~]$ screen -ls


== SCREEN RESPONDS
There are screens on:
        23487.pts-0.devxxx      (Detached)
        26727.pts-0.devxxx      (Attached)
2 Sockets in /tmp/uscreens/S-xxx.


== NOW KILL THE ONE YOU DONT WANT
[xxx@devxxx ~]$ screen -X -S 23487.pts-0.devxxx kill


== WANT PROOF?
[xxx@devxxx ~]$ screen -ls
There is a screen on:
        26727.pts-0.devxxx      (Attached)
1 Socket in /tmp/uscreens/S-xxx.
duggi
fonte
Isso não removeria o soquete, não mataria o processo por trás dele?
Martin C.
Este método é arriscado do ponto de vista da criação de processos zomby?
Fedir RYKHTIK 01/10/12
5

Como alternativa, enquanto estiver na sessão da tela, basta digitar exit

Isso matará a sessão de shell iniciada pela tela, que efetivamente encerra a sessão de tela em que você está.

Não há necessidade de se preocupar com o ID da sessão na tela, etc.

dat789
fonte