Załóżmy, że mamy taki trywialny demon napisany w pythonie:
def mainloop():
while True:
# 1. do
# 2. some
# 3. important
# 4. job
# 5. sleep
mainloop()
i demonizujemy go, używając start-stop-daemondomyślnie włączonego sygnału SIGTERM( TERM) --stop.
Załóżmy, że aktualnie wykonywany krok to #2. I w tej chwili wysyłamy TERMsygnał.
Dzieje się tak, że wykonanie kończy się natychmiast.
Przekonałem się, że mogę obsłużyć zdarzenie sygnałowe, signal.signal(signal.SIGTERM, handler)ale chodzi o to, że nadal przerywa ono bieżące wykonanie i przekazuje kontrolę handler.
Zatem moje pytanie brzmi - czy można nie przerywać bieżącego wykonania, ale obsługiwać TERMsygnał w oddzielnym wątku (?), Aby móc ustawić shutdown_flag = Truetak, aby mainloop()miał szansę zatrzymać się z gracją?
signalfdprosiłeś, wykorzystując i maskując dostawęSIGTERMdo procesu.