데몬 작업에서 SIGTERM(TERM) 신호를 사용하여 프로세스를 종료하면 중요한 작업이 갑자기 중단될 수 있습니다. 이 문제를 해결하기 위해 이 신호를 적절하게 처리하는 방법을 살펴보겠습니다.
Python으로 작성된 간단한 데몬:
def mainloop(): while True: # Perform important jobs # Sleep
시작-중지를 사용하여 데몬화 -daemon은 종료 시 SIGTERM(TERM)을 보냅니다. 중요한 작업(예: 2단계) 중에 신호가 수신되면 즉시 종료됩니다.
signal.signal(을 사용하여 신호 이벤트 처리를 시도합니다. signal.SIGTERM, 핸들러)는 현재 실행을 중단하고 제어를 핸들러로 리디렉션할 수도 있습니다.
현재 실행이 중단되는 것을 방지하기 위해 TERM 신호를 처리하는 별도의 스레드를 생성할 수 있습니다. 이 스레드는 shutdown_flag = True를 설정하여 메인 루프가 정상적으로 종료되도록 할 수 있습니다.
다음은 우아한 신호 처리를 위한 클래스 기반 솔루션입니다.
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("doing something in a loop ...") print("End of the program. I was killed gracefully :)")
이 솔루션을 사용하면 데몬이 SIGTERM을 적절하게 처리하여 중요한 작업을 수행할 수 있습니다. 종료되기 전에 완료됩니다. 또한 멀티 스레드 환경에서 신호를 처리하기 위한 깔끔하고 유지 관리 가능한 구현을 제공합니다.
위 내용은 Python 데몬에서 SIGTERM 신호를 적절하게 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!