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 damonizamos usando start-stop-daemon
que por defecto envía señal SIGTERM
( TERM
) --stop
.
Supongamos que el paso actual realizado es #2
. Y en este mismo momento estamos enviando TERM
señal.
Lo que sucede es que la ejecución termina de inmediato.
Descubrí que puedo manejar el evento de señal usando, signal.signal(signal.SIGTERM, handler)
pero la cuestión es que todavía interrumpe la ejecución actual y pasa el control a handler
.
Entonces, mi pregunta es: ¿es posible no interrumpir la ejecución actual sino manejar la TERM
señal en un hilo separado (?) Para poder configurarlo shutdown_flag = True
y mainloop()
tener la oportunidad de detenerlo con gracia?
signalfd
y enmascarar la entrega delSIGTERM
proceso.