A questão é quão bizarro o programa falha? Primeiras duas coisas que me vêm à mente:
- o programa envia com seu último suspiro algumas sequências de controle estranhas que permitem que
screen
também caia / termine / pense que é melhor não deixar você ver isso. - o programa envia sinais para seus processos pai (
screen
ou talvez um intermediário shell ) que os encerra.
Próximas etapas que eu tentaria:
- Com que precisão
screen
é encerrada? Isso mata todo o processoscreen
ou apenas sua própria janela (os comandos da tela paralela ainda estão ativos, a sessão de tela é desanexada)? - Se você executar o programa a partir de um shell, você pode pegar sinais vindo do programa usando o trap ?
- Será que ainda terminará
screen
se você redirecionar stdout e stderr para um arquivo (o que o arquivo contém se ele não falhar mais? - curioso). Talvez você ainda possa assistir ao programa em execução usandotail -f
. - OK, a evasão não dará insights interessantes, mas existe o mesmo problema ao usar
tmux
em vez descreen
?
Editar 1 (ad 1): O programa de falha pode ser executado diretamente da tela, por exemplo,
screen /usr/local/bin/your/crashing/program
ou com um processo de shell entre (por exemplo, você inicia sua janela de tela com seu shell favorito e executa o programa como
screen
/usr/local/bin/your/crashing/program
ou tem um script de shell que faz o respawning com algo como
bash -c 'while true ; do /usr/local/bin/your/crashing/program ; done'
Você pode dizer a partir da saída de pstree
quais processos estão envolvidos:
xterm(309)---bash(311)---screen(230)---screen(231)---bash(234)-+-less(323)
'-pstree(322)
No meu caso, iniciei screen
(230 e 231) de bash
(311) em uma janela xterm
(309) com outro bash
(234), do qual corri pstree | less
(322 e 323).
A tela termina se o processo filho aparecer. Este é um comportamento normal e não um acidente. Então, se o seu programa for iniciado diretamente na tela e travar, a tela também será encerrada. Se você tiver seu programa iniciado manualmente em um shell, esse shell deverá apresentar novamente seu prompt após o travamento do programa. Se a janela de tela fechar neste caso, algo é estranho.
Seria útil conhecer um pouco a rotatória, por exemplo como você inicia e reaparece seu programa.