Как правильно обработать сигнал SIGTERM?
Позволять'Предположим, у нас есть такой тривиальный демон, написанный на python:
def mainloop():
while True:
# 1. do
# 2. some
# 3. important
# 4. job
# 5. sleep
mainloop()
и мы демонизируем это с помощьюstart-stop-daemon
который по умолчанию отправляет (SIGTERM
TERM
) сигнал включен.--stop
Позволять's предположим, что текущий шаг выполнен#2
, И в этот самый момент мыповторная отправкаTERM
сигнал.
То, что происходит, - то, что выполнение немедленно прекращается.
мы обнаружили, что могу обработать событие сигнала, используяsignal.signal(signal.SIGTERM, handler)
но дело в том, что он по-прежнему прерывает текущее выполнение и передает управление.handler
Итак, мой вопрос - можно ли не прерывать текущее выполнение, а обрабатыватьTERM
сигнал в отдельном потоке (?), чтобы я мог установитьshutdown_flag = True
чтобыmainloop()
был шанс остановиться изящно?