La sesión de pantalla termina cuando el programa falla

La sesión de pantalla termina cuando el programa falla

Estoy ejecutando un programa en una sesión de pantalla, si el programa falla, se reinicia solo, pero cuando el programa falla, la sesión de pantalla finaliza.

Quiero que la sesión de pantalla permanezca abierta para que el programa pueda reiniciarse. ¿Hay alguna forma de hacer eso?

Estoy ejecutando Linux Debian 7 Wheezy

Respuesta1

La pregunta es, ¿qué tan extraño es que el programa falle? Las dos primeras cosas que me vienen a la mente:

  • el programa envía con su último aliento algunas secuencias de control extrañas que screentambién te permiten bloquear/terminar/pensar que es mejor no dejarte ver esto.
  • el programa envía señales a sus procesos padres ( screeno tal vez a un proceso intermedio)caparazón) que los pone fin.

Próximos pasos que probaría:

  1. ¿Con qué precisión se screentermina? ¿Termina todo el screenproceso o solo su propia ventana (los comandos de pantalla que se ejecutan en paralelo siguen vivos, la sesión de pantalla se desconecta)?
  2. Si ejecuta el programa desde un shell, ¿puedecaptar señalesproveniente del programa usandotrampa?
  3. ¿Aún termina screensi redireccionas?salida estándarystderra un archivo (¿qué contiene el archivo si ya no falla? Tengo curiosidad). Quizás aún puedas ver el programa ejecutándose usando tail -f.
  4. Bien, la elusión no brindará información interesante, pero ¿existe el mismo problema cuando se usa tmuxen lugar de screen?

Edición 1 (anuncio 1): el programa que falla se puede ejecutar directamente desde la pantalla, por ejemplo

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

o con un proceso de shell en el medio (por ejemplo, inicia la ventana de su pantalla con su shell favorito y luego ejecuta el programa como

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

o tener un script de shell que reaparece con algo como

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

A partir del resultado se puede saber pstreequé procesos están involucrados:

xterm(309)---bash(311)---screen(230)---screen(231)---bash(234)-+-less(323)
                                                               `-pstree(322)

En mi caso tengo un screen(230 y 231) iniciado desde un bash(311) en una xtermventana (309) con otra bash(234), desde la cual he ejecutado pstree | less(322 y 323).

La pantalla termina si el proceso hijo lo hace. Este es un comportamiento normal y no un accidente. Entonces, si su programa se inicia directamente en la pantalla y falla, la pantalla también finaliza. Si ha iniciado su programa manualmente en un shell, ese shell debería volver a presentar su mensaje después de que el programa haya fallado. Si en este caso la ventana de la pantalla se cierra, en realidad algo anda raro.

Sería útil conocer un poco los detalles, por ejemplo, cómo iniciar y reaparecer su programa.

información relacionada