Vamos supor que temos um daemon tão trivial escrito em python:
def mainloop():
while True:
# 1. do
# 2. some
# 3. important
# 4. job
# 5. sleep
mainloop()
e nós o daemonizamos usando o start-stop-daemon
qual, por padrão, envia sinal SIGTERM
( TERM
) --stop
.
Vamos supor que a etapa atual executada seja #2
. E neste exato momento estamos enviando TERM
sinal.
O que acontece é que a execução termina imediatamente.
Descobri que posso lidar com o evento de sinal usando, signal.signal(signal.SIGTERM, handler)
mas o fato é que ele ainda interrompe a execução atual e passa o controle para handler
.
Então, minha pergunta é - é possível não interromper a execução atual, mas manipular o TERM
sinal em um thread separado (?) Para que eu pudesse configurar shutdown_flag = True
para que mainloop()
tivesse a chance de parar normalmente?
signalfd
e mascarando a entrega doSIGTERM
processo.