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?


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


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


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

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

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.


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


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.


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


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


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.

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.