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