Eu já havia reconectado anteriormente a uma sessão de tela de execução longa com screen -dr control
. No entanto, às vezes, esse comando não é reconectado à tela e, em vez disso, é interrompido para sempre (mais de 10 minutos após o qual eu abortei). Isso acontece apenas quando a conexão SSH é interrompida inesperadamente e não quando a tela é desconectada corretamente Ctrl-A d
. Outras opções, como screen -x
ou screen -D -RR
também não funcionam.
Esta postagem sugere eliminar o PTY que mantém a sessão de tela, o que fará com que a tela conclua sua desconexão. No entanto, simplesmente mata o shell do qual screen -dr control
foi chamado.
Por exemplo:
$ ps -ef | grep control | grep -v grep
nomad 7387 7109 0 13:05 pts/50 00:00:00 screen -dr control
nomad 15299 1 0 Nov27 ? 00:13:47 SCREEN -S control
$ ps -ef | grep bash | grep 'pts/50'
nomad 7109 7108 0 12:49 pts/50 00:00:00 -bash
A postagem vinculada sugere que o bash
processo seja interrompido com o PID 7109. Isso também matará o screen -dr control
processo com o PID 7387. Depois, ainda não consigo conectar-me à tela.
O processo SCREEN -S control
que iniciou a sessão de tela tem init
como pai o qual eu obviamente não posso matar.
Existe uma maneira de reconectar à sessão de tela travada?
Atualização: Isso acontece no CentOS 6.4 usando o kernel 2.6.32-358.6.1.el6.x86_64. Os shells são todos lançados na versão 4.1.2 (1) do bash.
screen -ls
diz nesses casos "pendurados"?screen -d -r <session>
significa "desanexar e recuperar", portanto, não o desanexar em primeira mão não deve importar. (E para fazê-lo muitas vezes, isso não acontece ...)