Давайте предположим, что у нас есть такой тривиальный демон, написанный на 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()
изящно остановиться?
signalfd
и маскируя доставкуSIGTERM
процесса.