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