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