在 Python 中管理守護程式的上下文中,優雅地處理 SIGTERM 訊號對於確保有序關閉至關重要。當收到 SIGTERM 訊號時,程式的預設行為是立即終止,這可能會中斷關鍵操作。
為了防止突然終止,必須正確處理 SIGTERM 訊號。一種方法涉及使用 signal.signal 函數來註冊訊號的處理程序。但是,該處理程序仍會中斷目前執行流程並取得控制權。
要進行更精細的訊號處理,請考慮使用單獨的執行緒或進程來管理訊號。這將處理過程與主執行分離,允許程式在非同步處理訊號的同時繼續其操作。
一種常見的技術涉及創建一個標誌(例如 shutdown_flag),當 SIGTERM 發生時該標誌設置為 True處理程序被觸發。主循環可以定期檢查標誌,以便在設定 shutdown_flag 時正常終止進程。
以下是一個範例,示範如何使用類別實現乾淨的解決方案:
import signal import time class GracefulKiller: kill_now = False # Flag to indicate termination def __init__(self): # Register SIGTERM and SIGINT handlers to set kill_now 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() # Main loop that continues until kill_now is set to True while not killer.kill_now: time.sleep(1) print("Doing something in a loop...") print("End of the program. I was killed gracefully :)")
此腳本建立一個處理 SIGTERM 和 SIGINT 訊號的 GracefulKiller 類別。當收到任一訊號時,kill_now 標誌設定為 True。主循環定期檢查此標誌,並在kill_now 變為 True 時正常終止。
以上是如何在 Python 中優雅地處理 SIGTERM 訊號以順利終止進程?的詳細內容。更多資訊請關注PHP中文網其他相關文章!