Sessão de tela termina quando o programa trava

2

Estou executando um programa em uma sessão de Tela, se o programa travar, ele se reinicia, mas quando o programa falha, a sessão de tela é encerrada.

Eu quero que a sessão de tela permaneça aberta para que o programa possa ser reiniciado. Existe alguma maneira de fazer isso?

Estou executando o Linux Debian 7 Wheezy

    
por Zero 16.11.2014 / 02:13

1 resposta

1

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:

  1. Com que precisão screen é encerrada? Isso mata todo o processo screen ou apenas sua própria janela (os comandos da tela paralela ainda estão ativos, a sessão de tela é desanexada)?
  2. Se você executar o programa a partir de um shell, você pode pegar sinais vindo do programa usando o trap ?
  3. 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 usando tail -f .
  4. OK, a evasão não dará insights interessantes, mas existe o mesmo problema ao usar tmux em vez de screen ?

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.

    
por 16.11.2014 / 03:53