Como recuperar uma sessão de tela 'perdida'?

80

De alguma forma, eu consegui fechar uma janela da tela sem a tela 'perceber', para que a sessão ainda seja marcada como attached. Isso me impede de anexar novamente a esta sessão. O que eu posso fazer?

me@iupr-serv8:~$ screen -r
There are several suitable screens on:
    25028.pts-19.XXX-serv8  (01/05/2012 07:15:34 PM)    (Attached)
    24658.pts-19.XXX-serv8  (01/05/2012 07:11:38 PM)    (Detached)
    24509.pts-19.XXX-serv8  (01/05/2012 07:10:00 PM)    (Detached)
    18676.pts-5.XXX-serv8   (01/02/2012 06:55:33 PM)    (Attached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.
me@XXX-serv8:~$ screen -r 25028
There is a screen on:
    25028.pts-19.XXX-serv8  (01/05/2012 07:15:33 PM)    (Attached)
There is no screen to be resumed matching 25028.

[atualizar]

No final, descobri que a sessão não foi perdida, mas o ID da primeira sessão é 0. A segunda sessão que possui o ID 1.

Framester
fonte

Respostas:

108

Tente desconectá-lo primeiro com screen -d. Se isso não funcionar, você pode tentar, em ordem crescente de ênfase ,

   -d|-D [pid.tty.host]
        does  not  start screen, but detaches the elsewhere running screen session. It has the
        same effect as typing "C-a d" from screen's controlling terminal. -D is the equivalent
        to  the  power  detach key.  If no session can be detached, this option is ignored. In
        combination with the -r/-R option more powerful effects can be achieved:

   -d -r   Reattach a session and if necessary detach it first.

   -d -R   Reattach a session and if necessary detach or even create it first.

   -d -RR  Reattach a session and if necessary detach or create it. Use the first  session  if
           more than one session is available.

   -D -r   Reattach a session. If necessary detach and logout remotely first.

   -D -R   Attach  here and now. In detail this means: If a session is running, then reattach.
           If necessary detach and logout remotely first.  If it was not running create it and
           notify the user. This is the author's favorite.

   -D -RR  Attach here and now. Whatever that means, just do it.
angus
fonte
11
as -d -ropções juntas forçarão a anexar essa sessão.
Tim Kennedy
Eu sempre uso screen -xpara que eu possa conectar de vários locais ao mesmo tempo. Obviamente, se você fechar uma janela acidentalmente, parece -d -rmelhor apenas manter as coisas arrumadas.
mpontillo
5
screen -r '1234.somescreensession'

Há uma tela ligada:

1234.somescreensession (em anexo)

Não há uma tela a ser retomada correspondente à sessão 1234.somescreens.

Aqui está uma maneira simples de recuperar a sessão de tela.

screen -D -r '1234.somescreensession'
bresti
fonte
4

Tive o mesmo problema depois que minha conexão ssh foi fechada inesperadamente com a mensagem Write Failed: broken pipeenquanto eu tinha uma sessão de tela anexada. No entanto, não foi possível recuperar a sessão da tela usando qualquer um dos comandos acima. Observe que eu uso a seguinte versão:

~> screen --version
Screen version 4.00.03 (FAU) 23-Oct-06

Aparentemente, ainda havia uma instância de sshdexecução, o que me impedia de desconectar e reconectar a sessão. Depois de identificar a PIDinstância apropriada de sshde killing, pude me reconectar screen -r.


Apenas para obter informações: você definitivamente encontrará mais de um sshddemônio, um corresponderá ao seu login atual e outro pertencerá à screensessão obsoleta (de fato, pode haver vários outros programas em sshdexecução pertencentes a vários outros screen).

el_tenedor
fonte
Eu tive o mesmo problema boa chamada
dianovich 16/08/2015
3

Algumas vezes as várias telas estão sendo executadas em segundo plano.

Eles podem ser retomados por:

screen -r [pid]

Para obter a tela, primeiro execute e screen -R, em seguida, você verá todos os PIDs em execução da tela screen -r [pid].

Shiv Singh
fonte