¿Cómo procesar la señal SIGTERM con gracia?
Supongamos que tenemos un demonio tan trivial escrito en python:
def mainloop():
while True:
# 1. do
# 2. some
# 3. important
# 4. job
# 5. sleep
mainloop()
y lo demostramos utilizandostart-stop-daemon
que por defecto envíaSIGTERM
(TERM
) señal en--stop
.
Supongamos que el paso actual realizado es#2
. Y en este mismo momento estamos enviandoTERM
señal.
Lo que pasa es que la ejecución termina inmediatamente.
He encontrado que puedo manejar el evento de señal usandosignal.signal(signal.SIGTERM, handler)
pero la cosa es que todavía interrumpe la ejecución actual y pasa el control ahandler
.
Entonces, mi pregunta es: ¿es posible no interrumpir la ejecución actual sino manejar laTERM
señal en un hilo separado (?) para que pude establecershutdown_flag = True
así que esomainloop()
tuvo la oportunidad de parar con gracia?