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, indem wir start-stop-daemon
standardmäßig das Signal SIGTERM
( TERM
) senden --stop
.
Nehmen wir an, der aktuell ausgeführte Schritt ist #2
. Und in diesem Moment senden wir ein TERM
Signal.
Was passiert ist, dass die Ausführung sofort beendet wird.
Ich habe festgestellt, dass ich das Signalereignis mit verarbeiten kann, signal.signal(signal.SIGTERM, handler)
aber die Sache ist, dass es immer noch die aktuelle Ausführung unterbricht und die Steuerung an übergibt handler
.
Meine Frage ist also: Ist es möglich, die aktuelle Ausführung nicht zu unterbrechen, sondern das TERM
Signal in einem getrennten Thread (?) Zu verarbeiten, damit ich es shutdown_flag = True
so einstellen konnte, dass ich die Möglichkeit mainloop()
hatte, ordnungsgemäß anzuhalten?
signalfd
ich die LieferungSIGTERM
an den Prozess verwendet und ausgeblendet habe.