Não é possível recuperar a tela desanexada

11

Eu uso massa de vidraceiro e tenho uma conexão sem fio não confiável; portanto, uso a tela para continuar meu trabalho. Frequentemente, eu me desconecto e não consigo reconectar minha tela. Eu vou correr screen -D -RRe ele ficará lá indefinidamente. Tentei ctrl+zrecuperar meu console, seguido por ps aux | grep screene depois kill -9para todos os resultados e, screen -D -RRnovamente, mas obtive os mesmos resultados. Eu tento qualquer combinação de d e r que você queira mencionar, mas ainda fica lá. Minha tela está lá, simplesmente não fará nada, muito menos o resumo.

Alguém tem dicas, truques ou idéias sobre como retomar minha sessão na tela?

Dave Aaron Smith
fonte

Respostas:

15

Eu vi isso quando largo uma conexão em uma tela ativa e reconecto. O bug # 27462 ("Reconectar travamentos quando a sessão original é perdida") descreve o problema como eu o vejo. O que parece acontecer é que a tela está tentando notificar o tty que o detém que está prestes a sair, mas como o tty está suspenso devido a uma queda de conexão, ele precisa aguardar o tempo limite (que é superior a cinco minutos) em alguns casos).

Para consertar, eu faço o seguinte:

  • descobrir qual tty está segurando a sessão da tela ps -ef | grep screen | grep pty
  • encontre o bash de logon associado a esse tty ps -ef | grep bash | grep $PTY
  • matar essa festança kill -KILL $PID

Isso faz com que a tela seja desconectada corretamente e permite que você se reconecte normalmente.

Veja aqui um exemplo de script que automatiza um pouco isso.

David Mackintosh
fonte
ps -ef | tela grep | grep tty nunca imprime nada porque ps -ef | A tela grep nunca retorna nada com a string tty.
Dave Aaron Smith
Na verdade, o script de exemplo parece fazer o truque. Obrigado!
Dave Aaron Smith
1
Sim, eu quis dizer 'pty', não 'tty'.
David Mackintosh
2

Eu tive um problema semelhante com minhas sessões de tela. Eu os nomeio e os tenho configurados como sessões multiusuário. O que descobri foi que estava listando minhas sessões, mas me dizendo que não tinha nenhuma a que me reconectar. Então eu tentei:

screen -x <session_name>

Funcionou como um campeão!

Doug Noel
fonte
1

Não posso dizer que já tive um problema com a tela não voltar, independentemente do tipo de conexão em que estou. Meu método usual:

ssh myname@foo
screen -S sessionName
(do my work... get disconnected...)

ssh myname@foo
screen -d (just to make sure anything wasn't left attached)
screen -r sessionName
Jason Antman
fonte
1
Por exemplo, screen-list retorna 32322.mySession (Attached). Então eu tela -d mySession. Então screen -list ainda retorna 32322.mySession (Attached) e screen -r mySession retorna Não há tela a ser retomada correspondente a daveSession.
Dave Aaron Smith
você tentou apenas "tela-d"?
Jason Antman
0

É possível que esse bug esteja afetando você?

http://savannah.gnu.org/bugs/?27462

Você pode tentar fazer a solução alternativa que eles recomendam e ver se funciona?

Kyle-tummy.com
fonte
A solução alternativa não fez muito sentido para mim. Minha saída da tela ps -ef | grep não se parece com o exemplo.
Dave Aaron Smith
0

Soulrce: https://kb.iu.edu/data/ahrm.html

To see your existing screen sessions, enter:
  screen -list
This will display a list of your current screen sessions. For instance, if you had one attached screen, you would see:

         1636.pts-21.hostname      (Attached)

To detach an attached screen, enter:
  screen -D
If you have more than one attached screen, you can specify a particular screen to detach. For example, to detach the screen in the above example, you would enter:
  screen -D 1636.pts-21.hostname
giorgio79
fonte
0

Se você é inteligente como eu, estava tentando retomar uma sessão na tela iniciada como rootna conta de usuário comum. Descobri isso ls /var/run/screenmostrando-me um diretório pararoot

uhFocuz
fonte
0

Ocasionalmente, tenho o mesmo problema (tela -r -d não é reiniciada, não responde). Para corrigir, localize o terminal (tty / pty) associado à sessão da tela:

screen -list
There is a screen on:
    28176.pts-51.localhost        (Attached)
1 Socket in /tmp/uscreens/S-xxxx.

Encontre o terminal listado (neste exemplo, pts-51):

ps axuw | grep 'pts/51'   # will vary depending upon how pty's are named
you     12293  0.0  0.2  2148 1128 pts/51   Ss   10:34   0:00 -bash

Mate os processos nesse terminal (geralmente seu shell):

kill 12293

execute ps novamente para garantir que ele se foi. Se não :

kill -9 12293

No meu servidor (gnu / linux), às vezes terei que matar -9 várias vezes até que ele morra.

Depois que todos os processos nesse tty se foram, a tela deve ser retomada corretamente:

screen -r -d
tb303
fonte
-1

Remova as telas mortas com screen -wipe.

Gerçek Karakuş
fonte
Eu acho que é exatamente o oposto do que ele está tentando fazer.
Chris S