Python에서 데몬 프로세스를 관리하는 맥락에서 SIGTERM 신호를 적절하게 처리하는 것은 순차적인 종료를 보장하는 데 중요합니다. SIGTERM 신호가 수신되면 기본 동작은 프로그램이 즉시 종료되어 잠재적으로 중요한 작업이 중단되는 것입니다.
갑작스러운 종료를 방지하려면 SIGTERM 신호를 적절하게 처리하는 것이 중요합니다. 한 가지 접근 방식은 signal.signal 함수를 사용하여 신호에 대한 핸들러를 등록하는 것입니다. 그러나 이 핸들러는 여전히 현재 실행 흐름을 중단하고 제어권을 갖습니다.
보다 정교한 신호 처리를 위해서는 별도의 스레드나 프로세스를 사용하여 신호를 관리하는 것이 좋습니다. 이렇게 하면 처리 프로세스가 기본 실행에서 분리되어 신호가 비동기적으로 처리되는 동안 프로그램이 작업을 계속할 수 있습니다.
한 가지 일반적인 기술은 SIGTERM이 True로 설정되는 플래그(예: shutdown_flag)를 만드는 것입니다. 핸들러가 트리거됩니다. 메인 루프는 주기적으로 플래그를 확인하여 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!