Recolocando uma sessão de tela existente

61

Eu tenho um programa em execução na tela. Na verdade, quando eu desanexar da sessão e verificar o netstat, posso ver que o programa ainda está em execução (que é o que eu quero):

udp        0      0 127.0.0.1:1720          0.0.0.0:*                           3759/ruby       

Agora quero anexar novamente à sessão que está executando esse processo. Então eu inicio um novo terminal e digito a tela -r

$ screen -r
There are several suitable screens on:
    5169.pts-2.teamviggy    (05/31/2013 09:30:28 PM)    (Detached)
    4872.pts-2.teamviggy    (05/31/2013 09:25:30 PM)    (Detached)
    4572.pts-2.teamviggy    (05/31/2013 09:07:17 PM)    (Detached)
    4073.pts-2.teamviggy    (05/31/2013 08:50:54 PM)    (Detached)
    3600.pts-2.teamviggy    (05/31/2013 08:40:14 PM)    (Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.

Mas como eu sei qual é a sessão que está executando o processo que criei?

Agora, um dos documentos que encontrei disse:

"Quando você estiver usando uma janela, digite Ca A para dar um nome a ela. Esse nome será usado na lista de janelas e ajudará você a lembrar o que está fazendo em cada janela quando começar a usar muito das janelas. "

A coisa é quando estou em uma nova sessão de tela, tento pressionar o controle + A e nada acontece.

    
por JohnMerlino 01.06.2013 / 03:39

6 respostas

73

Existem dois níveis de "listagens" aqui envolvidas. Primeiro, você tem a "lista de janelas" dentro de uma sessão individual, que é o que a ctrl-A é, e a segunda há uma "listagem de sessão", que é o que você colou na sua pergunta e o que também pode ser visto com screen -ls .

Você pode personalizar os nomes das sessões com o parâmetro -S , caso contrário, ele usa seu nome de host (teamviggy), por exemplo:

$ screen

(ctrl-A d para desanexar)

$ screen -S myprogramrunningunderscreen

(ctrl-A d para desanexar)

$ screen -ls

There are screens on:
    4964.myprogramrunningunderscreen    (05/31/2013 09:42:29 PM)    (Detached)
    4874.pts-1.creeper  (05/31/2013 09:39:12 PM)    (Detached)
2 Sockets in /var/run/screen/S-paul.

Como bônus, você pode usar uma abreviação não ambígua do nome passado a -S para reconectar:

screen -r myprog

(Eu estou reconectado à sessão myprogramrunningunderscreen )

    
por Paul 01.06.2013 / 04:48
18

Eu tive um caso em que screen -r não conseguiu reconectar. Adicionando o sinal -d para que parecesse assim

screen -d -r

funcionou para mim. Ele destacou a tela anterior e permitiu que eu ligasse novamente. Veja a página Man para mais informações.

    
por njcwotx 01.12.2016 / 21:31
11

Uma maneira fácil é simplesmente reconectar a uma tela arbitrária com

screen -r

Depois de executar a tela, você pode obter uma lista de todas as telas ativas pressionando Ctrl-A " (ou seja, control-A seguido de aspas duplas). Então você pode apenas selecionar as telas ativas uma de cada vez e ver o que elas estão executando. Nomear as telas, é claro, facilitará a identificação da certa.

Apenas meus dois centavos

    
por Dr K 08.07.2015 / 17:36
2

Eu costumo usar o seguinte combo onde eu preciso trabalhar em várias máquinas em vários clusters:

screen -S clusterX

Isso cria a nova sessão de tela onde posso criar o ambiente.

screen -dRR clusterX

Isso é o que eu uso posteriormente para reconectar a essa sessão de tela. Os bits bacanas são que, se a sessão é anexada em outro lugar, ela desanexa essa outra exibição. Além disso, se não houver sessão por algum motivo peculiar, como alguém que reiniciou meu servidor sem que eu saiba, ele cria um. Finalmente. se várias sessões existirem, ele usa o primeiro.

Muita admiração para com link por essa dica de volta.

EDITAR:

Veja também algumas explicações úteis de man screen em parâmetros enigmáticos

       -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.

há mais com -D , então não deixe de conferir man screen

    
por Lefty G Balogh 04.01.2018 / 11:01
1

A saída de screen -list é formatada como pid.tty.host . Os pids podem ser usados para obter o primeiro processo filho com pstree :

screen -list|cut -f1 -d'.'|cut -f2|xargs -n 1 pstree -p|grep "^screen"

Você receberá uma lista como esta

screen(5169)---zsh(5170)---less(15268)
screen(4872)---zsh(4873)-+-cat(11364)
...
    
por tilnam 14.03.2018 / 18:12
0
screen -d -r 4964

ou

screen -d -r 4874
$ screen -ls
There are screens on:
4964.myprogramrunningunderscreen    (05/31/2013 09:42:29 PM)    (Detached)
4874.pts-1.creeper  (05/31/2013 09:39:12 PM)    (Detached)
2 Sockets in /var/run/screen/S-paul.
    
por 24.08.2018 / 04:21