
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
screen
también te permiten bloquear/terminar/pensar que es mejor no dejarte ver esto. - el programa envía señales a sus procesos padres (
screen
o tal vez a un proceso intermedio)caparazón) que los pone fin.
Próximos pasos que probaría:
- ¿Con qué precisión se
screen
termina? ¿Termina todo elscreen
proceso o solo su propia ventana (los comandos de pantalla que se ejecutan en paralelo siguen vivos, la sesión de pantalla se desconecta)? - Si ejecuta el programa desde un shell, ¿puedecaptar señalesproveniente del programa usandotrampa?
- ¿Aún termina
screen
si 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 usandotail -f
. - Bien, la elusión no brindará información interesante, pero ¿existe el mismo problema cuando se usa
tmux
en lugar descreen
?
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 pstree
qué 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 xterm
ventana (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.