Wie kann ich das SIGTERM-Signal ordnungsgemäß verarbeiten?

Nehmen wir an, wir haben einen so trivialen Daemon in Python geschrieben:

def mainloop():
    while True:
        # 1. do
        # 2. some
        # 3. important
        # 4. job
        # 5. sleep

mainloop()

und wir dämonisieren es mitstart-stop-daemon was standardmäßig sendetSIGTERM (TERM) Signal an--stop.

Angenommen, der aktuell ausgeführte Schritt ist#2. Und genau in diesem Moment senden wirTERM Signal.

Was passiert ist, dass die Ausführung sofort beendet wird.

Ich habe festgestellt, dass ich mit dem Signalereignis umgehen kannsignal.signal(signal.SIGTERM, handler) aber die Sache ist, dass es immer noch die aktuelle Ausführung unterbricht und die Steuerung an übergibthandler.

Meine Frage ist also, ob es möglich ist, die aktuelle Ausführung nicht zu unterbrechen, sondern die Verarbeitung zu übernehmenTERM signalisiere in einem getrennten thread (?) damit ich einstellen konnteshutdown_flag = True damitmainloop() eine Chance gehabt, anmutig zu stoppen?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage