A sessão de tela termina quando o programa falha

A sessão de tela termina quando o programa falha

Estou executando um programa em uma sessão de tela. Se o programa travar, ele será reiniciado, mas quando o programa travar, a sessão de tela será encerrada.

Quero que a sessão da tela permaneça aberta para que o programa possa reiniciar sozinho. Existe alguma maneira de fazer isso?

Estou executando o Linux Debian 7 Wheezy

Responder1

A questão é: quão bizarro é o travamento do programa? As duas primeiras coisas que me vêm à mente:

  • o programa envia em seu último suspiro algumas sequências de controle estranhas que screentambém permitem travar/encerrar/pensar que é melhor não deixar você ver isso.
  • o programa envia sinais para seus processos pais ( screenou talvez um intermediárioconcha) que os encerra.

Próximas etapas que eu tentaria:

  1. Com que precisão foi screenencerrado? Ele mata todo o screenprocesso ou apenas sua própria janela (os comandos de tela em execução paralela ainda estão ativos, a sessão de tela é desconectada)?
  2. Se você executar o programa a partir de um shell, você podecapturar sinaisvindo do programa usandoarmadilha?
  3. Ele ainda termina screense você redirecionarsaída padrãoestderrpara um arquivo (o que o arquivo contém se não travar mais - estou curioso). Talvez você ainda possa assistir o programa rodando usando tail -f.
  4. OK, a evasão não fornecerá insights interessantes, mas existe o mesmo problema ao usar tmuxem vez de screen?

Edição 1 (anúncio 1): O programa que trava pode ser executado diretamente na tela, por exemplo

screen /usr/local/bin/your/crashing/program

ou com um processo de shell intermediário (por exemplo, você inicia sua janela de tela com seu shell favorito e depois executa o programa como

screen
/usr/local/bin/your/crashing/program

ou tenha um script de shell que renasça com algo como

bash -c 'while true ; do /usr/local/bin/your/crashing/program ; done'

Você pode saber pela saída pstreequais 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 um bash(311) em uma xtermjanela (309) com outro bash(234), da qual executei pstree | less(322 e 323).

A tela termina se o processo filho terminar. Este é um comportamento normal e não uma falha. Portanto, se o seu programa for iniciado diretamente na tela e travar, a tela também será encerrada. Se você iniciou seu programa manualmente em um shell, esse shell deverá apresentar novamente seu prompt após o programa travar. Se a janela da tela fechar neste caso, algo está realmente estranho.

Seria útil conhecer um pouco o rodeio, por exemplo, como você inicia e reinicia seu programa.

informação relacionada