Screen
verifica o fifo / soquete sempre que recebe um SIGCHLD
sinal. Se o soquete estiver faltando, ele será recriado. Portanto, a solução é encontrar o processo e enviá-lo SIGCHLD
.
No meu sistema Debian, screen
parece estar instalado como setgid, utmp
mas não setuid, então a primeira solução da FAQ abaixo funcionou:
$ kill -CHLD 30860
$ ls /var/run/screen/S-username/
30860.pts-4.localhost
Nos sistemas em que a tela está instalada root
, o setuid não funcionará e você precisará matar um dos processos filhos da sessão de tela ativa para forçar o kernel a enviar o sinal para você. Isso significa sacrificar uma das janelas da tela para se reconectar com o restante (escolha sabiamente!).
Em uma FAQ arquivada do Gentoo Wiki :
Soquete ausente
Às vezes, o soquete de uma tela ainda em execução pode ser destruído, embora o processo real e todos os seus processos filhos ainda estejam em execução. screen -list exibirá "Nenhum soquete encontrado em / tmp / uscreens / .." Algumas instruções úteis sobre como se recuperar disso (e alguns outros problemas incomuns) em http://www4.informatik.uni-erlangen.de/ ~ jnweiger / screen-faq.html # MISC a
cerca de 2/3 do caminho.
P: Por alguma razão desconhecida, o fifo em / tmp / screens / S-myname desapareceu e não consigo retomar minha sessão de tela. Existe uma maneira de recriar o fifo?
A: A tela verifica o fifo / soquete sempre que recebe um sinal SIGCHLD. Se ausente, o fifo / soquete é recriado então.
Se a tela estiver em execução não definida, o usuário poderá emitir um
kill -CHLD screenpid
diretamente ( -CHILD
em alguns sistemas). Screenpid é o ID do processo de tela encontrado em uma ps -x
listagem.
Mas geralmente isso não funcionará, pois a tela deve ser instalada como root setuid. Nesse caso, você não poderá enviar um sinal, mas o kernel enviará. Faz isso sempre que um filho da tela altera seu estado. Encontre o ID do processo (shellpid abaixo) do shell "menos importante" em execução na tela. A tentativa kill -STOP shellpid
. Se o fifo / socket não reaparecer, destrua o processo do shell. Você sacrifica uma concha para salvar o resto. Se nada funcionar, não se esqueça de remover todos os processos em execução na sessão de tela perdida.