Su programa Python lo deshace nohup.

Su programa Python lo deshace nohup.

Intenté iniciar un script de shell a través de una sesión remota, que inicia un proceso en segundo plano usando el comando.

nohup python3 run.py > nohup.out &

Cuando se cierra la sesión remota, el proceso se cierra con el mensaje:

Señal captada SIGHUP

SIGHUP atrapado pero no demonizado. Saliendo.

No entiendo; ¿Por qué el proceso se cancela cuando se inició en segundo plano usandonohup &?

Respuesta1

Su programa Python lo deshace nohup.

nohupignora la señal de colgar SIG_IGNy luego carga en cadena su programa en el mismo proceso.

Tu programa Pythonse reinicia rápidamenteel manejo de señal para la señal de colgar, instalando su propio manejador de señal. Ese controlador verifica una función interna (que no está muy bien diseñada, ya que se basa en algunas suposiciones erróneas, si es la que he visto) y decide que el curso de acción apropiado al recibir una señal de colgar es imprimir ese mensaje. y salir.

Su programa Python por diseño no es nohupcapaz. En un sistema con un shell de control de trabajos y semántica de sesión/trabajo POSIX, es necesario realizar disownel trabajo de modo que el shell nunca se entere para enviarle una señal de colgar en primer lugar.

(Incluso eso no es suficiente en los sistemas operativos systemd. Debido a que la gente de systemd ha hecho un poco de oreja de cerdo con su mecanismo de sesión de inicio de sesión en el espacio de usuario, también debe asegurarse de que el mecanismo de systemd que señala el apagado del sistema, en lugar de colgar, para Las sesiones de inicio de sesión en cada cierre de sesión tampoco se activan).

Otras lecturas

información relacionada