¿Cómo manejar y retener correctamente el apagado del sistema (y SIGTERM) para finalizar su trabajo en Python?

Necesidad básica: tengo un demonio de Python que está llamando a otro progtwig a través de os.system. Mi deseo es poder manejar adecuadamente el apagado del sistema o SIGTERM para permitir que el progtwig llamado regrese y luego salga.

Lo que ya he intentado: He intentado un enfoque utilizando la señal:

import signal, time def handler(signum = None, frame = None): print 'Signal handler called with signal', signum time.sleep(3) #here check if process is done print 'Wait done' signal.signal(signal.SIGTERM , handler) while True: time.sleep(6) 

El uso de time.sleep no parece funcionar y la segunda impresión nunca se llama.

He leído algunas palabras sobre atexit.register (controlador) en lugar de signal.signal (signal.SIGTERM, controlador), pero no se llama a nada al matar.

Su código casi funciona, excepto que se olvidó de salir después de limpiar.

A menudo necesitamos capturar varias otras señales como INT, HUP y QUIT, pero no tanto con los demonios.

 import sys, signal, time def handler(signum = None, frame = None): print 'Signal handler called with signal', signum time.sleep(1) #here check if process is done print 'Wait done' sys.exit(0) for sig in [signal.SIGTERM, signal.SIGINT, signal.SIGHUP, signal.SIGQUIT]: signal.signal(sig, handler) while True: time.sleep(6) 

En muchos sistemas, los procesos ordinarios no tienen mucho tiempo para limpiar durante el apagado. Para estar seguro, puede escribir un script init.d para detener su demonio y esperar.