Como forço a desanexação do Screen de outra sessão SSH?

158

Eu tinha o Screen rodando dentro de uma sessão SSH. Terminal congelou. Depois de reiniciar o Terminal, a sessão Screen ainda acha que está anexada. Talvez seja. Talvez eu realmente não saiba o que isso significa.

Gostaria de anexar a essa sessão da tela a partir de um novo login SSH. Não quero matar essa sessão da tela, pois coisas importantes estão acontecendo por lá. :)

As opções que acho que tenho (nenhuma das quais sei resolver):

  • Como desanexar essa sessão da tela?
  • Como eu mato a sessão SSH à qual a sessão Screen está anexada?
T. Brian Jones
fonte

Respostas:

252

Como José respondeu, screen -d -rdeve fazer o truque. Essa é uma combinação de dois comandos, conforme extraídos da página de manual.

screen -ddesanexa a sessão de tela já em execução e screen -rreconecta a sessão existente. Ao executar screen -d -r, você força a tela a desanexá-la e, em seguida, retoma a sessão.

Se você usar capital -D -RR, cito a página de manual porque é bom demais para deixar passar.

Anexe aqui e agora. O que quer que isso signifique, basta fazê-lo.

Nota: é sempre uma boa ideia verificar o status de suas sessões por meio de "screen-list".

Matt S.
fonte
3
Você também pode fazer o screen -xque é mais rápido de digitar, mas não totalmente equivalente. Ele anexará a sessão uma segunda vez sem desconectar primeiro, resultando no modo de exibição múltipla.
jlh
10
lembre-se de "Screen Doctor"; screen -Dr
precisa saber é o seguinte
43

tente com screen -d -rouscreen -D -RR

Jose Luis Martin
fonte
6

Resposta curta

  1. Reconecte sem ejetar outros: screen -x
  2. Obter lista de monitores:, ^A *selecione o que deseja desconectar, pressioned


Resposta explicada

Antecedentes: Quando eu procurava a solução com a mesma descrição do problema, sempre obtive essa resposta. Eu gostaria de fornecer uma solução mais sensata. (Por exemplo: a outra tela anexada tem um tamanho diferente e não consigo redimensioná-la no meu terminal.)

Nota: PREFIX geralmente é ^A=ctrl+a

Nota: o display também pode ser chamado:

  • "front-end do usuário" (no atmanual de comandos na tela)
  • "client" (vocabulário tmux em que esta funcionalidade está detach-client)
  • "terminal" (como chamamos a janela em nossa interface do usuário) / dependendo da

1. Anexe novamente uma sessão :screen -x

-xanexar a uma sessão de tela não desanexada sem desanexá-lo

2. Liste as exibições desta sessão:PREFIX *

É a chave padrão obrigatório para: PREFIX :displays. Ao executá-lo na tela, identifique a outra tela que queremos desconectar (por exemplo, tamanho menor). (Sua exibição atual é exibida em cores mais claras / negrito quando não selecionada ).

term-type   size         user interface           window       Perms
---------- ------- ---------- ----------------- ----------     -----
 screen     240x60         you@/dev/pts/2      nb  0(zsh)        rwx
 screen      78x40         you@/dev/pts/0      nb  0(zsh)        rwx

Usando as setas , selecione a exibição direcionada , pressione. d Se nada acontecer, você tentou desanexar sua própria exibição e a tela não a desanexará. Se for outro, dentro de um ou dois segundos, a entrada desaparecerá.

Pressione ENTERpara sair da listagem.

Opcionalmente: para ajustar o conteúdo à sua tela, reflua : PREFIX F(F maiúsculo)

Trecho da página de manual da tela:

exibe

Mostra uma lista tabular de todos os front-ends (telas) do usuário conectado no momento. Isso é mais útil para sessões multiusuário. As seguintes teclas podem ser usadas na lista de telas:

  • mouseclickMover para a linha selecionada. Disponível quando "mousetrack" está ativado.
  • space Atualize a lista
  • d Desconecte essa exibição
  • D Desconecte a alimentação dessa tela
  • C-g, enterOu escapesair da lista
user10874456
fonte
-2

Tente o comando screen -d -r. Isso funcionou para mim ..!

Vimal Surendran
fonte
2
Repetir a resposta aceita e com 6 anos não é útil
jeb