處理SIGTERM 以實現正常關機
在實際應用程式中,確保進程能夠正常處理終止訊號至關重要以防止突然中斷。在 Python 中,處理 SIGTERM (TERM) 是管理守護程式時的常見要求。
考慮以下範例守護程式:
def mainloop(): while True: # Important operations # ... # Sleep
問題:
Daemon 程式預設收到SIGTERM 訊號時,執行流程會立即中斷,導致進程在沒有完成正在進行的操作的情況下終止。
問題:
是否可以在不中斷當前執行流程的情況下優雅地處理SIGTERM?目標是讓進程完成當前操作,然後透過在單獨的執行緒中設定關閉標誌來正常退出。
解決方案:
使用Graceful Killer 類別:
我們可以利用一個簡單的GracefulKiller 類來優雅地處理SIGTERM:
import signal import time class GracefulKiller: kill_now = False def __init__(self): signal.signal(signal.SIGINT, self.exit_gracefully) signal.signal(signal.SIGTERM, self.exit_gracefully) def exit_gracefully(self, signum, frame): self.kill_now = True if __name__ == '__main__': killer = GracefulKiller() while not killer.kill_now: time.sleep(1) print("Performing operation...") print("Process exited gracefully.")
在此解決方案中:
以上是Python 流程可以不間斷地優雅地處理 SIGTERM 嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!