matar uma sessão de tela

65

Estou tentando matar uma sessão de tela. Notei muitas outras questões relacionadas, mas nenhuma dessas respostas está funcionando para mim. Estou tentando matar a seguinte sessão:

screen -ls
There is a screen on:
    23520.pts-6.porkypig    (09/30/2013 02:49:47 PM)    (Detached)
1 Socket in /var/run/screen/S-root.

screen -r 23520.pts-6.porkypig

Agora estou na sessão. De acordo com a documentação:

http://www.gnu.org/software/screen/manual/screen.html#Quit

Eu devo pressionar "control a" e depois "control". Eu faço isso e nada acontece.

Outra solução dizia pressionar Ctrl+ ae digitar: sair. No entanto, novamente, ele não faz nada. De fato, pressionando control+ a, absolutamente nada acontece depois, exceto a mensagem "Nenhuma outra janela"

JohnMerlino
fonte
11
em v4.x tela, para matar todas as sessões,ps aux | grep "SCREEN" | awk '{print $2}' | xargs kill
Fredrick Gauss
2
Para o registro, você pode simplesmente fazer screen -r porkypigou screen -r 23520, em vez de precisar incluir a sequência completa. Os nomes de tela devem facilitar as coisas, não são mais complicados.
Mikkel

Respostas:

73

primeiro, é necessário anexar novamente à sessão da tela
screen -r 23520como você fez. Em seguida, pressione ctrl+ ae, em seguida, uma capital Ke pressione yquando for perguntado se você realmente deseja interromper a sessão

Jacob Minshall
fonte
2
Isso funciona se houver um problema com um processo em execução na tela, mas não se houver um problema com a própria tela. Esse é o caso em 99% do tempo e tem o benefício adicional de afetar apenas uma única janela na tela em vez de encerrar todas as janelas.
Mikkel
11
É para matar uma janela, não uma sessão
Eric Wang
53

Você pode sair dessa tela sem anexá-la. Primeiro, encontre sua sessão:

$ screen -ls

e então saia:

$ screen -XS [session # you want to quit] quit

(-X = Executar comando, -S sessão PID para executar)

[ATUALIZAR]

Exemplo:

screen -XS 20411 quit
shgnInc
fonte
11
Isso foi bem simples. Você pode simplificá-lo ainda mais combinando -X -S com -XS
AJ.
2
Você deve dar crédito a resposta innaM se você copiá-lo
Martin Thoma
8

Isso matará todas as telas desanexadas:

tela -ls | grep desanexado | cut -d. -f1 awk '{print $ 1}' | xargs kill

Isso matará todas as telas, conectadas ou desanexadas

tela -ls | grep pts | cut -d. -f1 awk '{print $ 1}' | xargs kill
user324207
fonte
7

Portanto, com todas essas sugestões oficiais, vamos procurar algo mais fácil, eficaz e mais simples.

pkill screen

Quem quer entrar em uma tela desconhecida e desnecessária apenas para pressionar alguns comandos que a maioria mal consegue lembrar? Isso evita entrar nele e o mata imediatamente.

Além disso, se você tiver mais de um, isso levará todos de uma só vez.

Brian Thomas
fonte
11
Observe que isso matará todas as telas em execução, que podem ou não ser o que você deseja.
Mikkel
Não é uma boa escolha. Eu venho fazendo isso há algum tempo. Às vezes, causa maus comportamentos (por exemplo, desconectando-se da sua conta de usuário imediatamente). Além disso, como o @Mikkel mencionou, pode causar o fechamento de todas as suas telas, o que não seria o que você deseja. Às vezes, você precisa continuar executando algumas (por exemplo, algumas estão sendo executadas pelo sistema) e parar algumas outras telas.
MAChitgarha
2

Encontrei esse problema ao atualizar a tela. O screencomando iria pendurar ao tentar reatar a sessão, independentemente de quantos -Dou -RI adicionado ao comando. No entanto, screen -lsfornece convenientemente o pid da sessão, permitindo que você intervenha usando o seguinte:

10:42 user ~ $ screen -ls
There is a screen on:
        5730.my_screen     (Detached)
1 Socket in /tmp/screens/S-user.

10:42 user ~ $ sudo kill 5730

10:43 user ~ $ screen -ls
No Sockets found in /tmp/screens/S-user.

(Isso é semelhante à resposta de Brian Thomas, mas a dele matará todas as sessões de tela em execução, o que pode não ser o que você deseja se você tiver várias telas abertas, mas apenas uma se comportar mal.)

Mikkel
fonte
Depois de 6 horas quebrando a cabeça por toda a internet ... a sua foi a única resposta que funcionou. Obrigado companheiro!
precisa saber é o seguinte
1

Como você, eu queria matar minha sessão na tela e achei a documentação inútil. Convencido de que não deve ser um atalho de teclado, descobri que
ctrl + a, em seguida, \
obras

Eu recebo o prompt: "Realmente feche e mate todas as suas janelas [y \ n]"

Não sei por que a documentação diz ctrl + aentão ctrl + \. Isso não faz nada por mim.

lizp
fonte
1

Você pode encontrar o ID do processo da tela em execução anexada. Eu achei o mesmo que o ID da sessão, que você pode obter por comando:
screen -ls
E você pode usar o seguinte comando para matar esse processo:
kill [sessionId]ou
sudo kill [sessionId]
Você pode matar a tela, mesmo que ela esteja anexada em outra janela do terminal.

Siddhant
fonte
0

Pressione ctrl + d para matar a janela da tela. Repita isso até matar todas as janelas da tela. Uma vez que você esgotou todas as telas do Windows, a sessão será finalizada. Solução mais curta se você não tiver muitas janelas

Dilushan
fonte