Estoy implementando un sistema simple para ejecutar trabajos de forma remota a través de SSH. Mi objetivo es ejecutar el trabajo dentro de screen
y registrar todos sus resultados usando script
y cargar el texto mecanografiado en un servidor cuando finalice el trabajo. Sin embargo, estoy teniendo dificultades para manejar SIGTERM correctamente (por ejemplo, cuando la máquina remota está a punto de apagarse) ya que el script
proceso no finaliza al recibir SIGTERM (en lugar de eso, el proceso que se ejecuta dentro script
se convierte en un zombi).
Asuma el siguiente comando:
script -e -q -c 'ping www.google.com'
Usar killall -TERM script
para enviar una señal SIGTERM al script
proceso parece pasar la señal SIGTERM ping
(que termina), sin embargo, se convierte en un proceso zombie y script
no termina:
> ps -aux | grep ping
karel 16460 0.0 0.0 10852 2732 pts/2 S+ 12:57 0:00 script -e -q -c ping www.google.com
karel 16461 0.1 0.0 0 0 ? Zs 12:57 0:00 [ping] <defunct>
Si lo entiendo correctamente, el ping
proceso es un zombie porque el script
proceso padre todavía lo está observando. Sin embargo, ¿es posible dejar de script
observar el proceso y finalizarlo correctamente (mientras se vacía el texto mecanografiado)?