프로그램의 정상적/비정상적 종료

About_work·2024년 7월 19일
0

cs 기초

목록 보기
36/38

1. 프로그램이 정상적으로 종료될 때

  • 정상적인 종료의 예는 다음과 같습니다:
  1. 프로그램 코드가 자연스럽게 종료되는 경우:

    • 메인 함수나 스크립트가 모든 작업을 완료하고 마지막 명령을 실행한 후 종료되는 경우.
    def main():
        print("Doing some work...")
        return
    
    if __name__ == "__main__":
        main()
        # 프로그램 종료 시점
  2. sys.exit()가 호출된 경우:

    • sys.exit() 함수가 호출되면 정상적인 종료로 간주되며 atexit 핸들러가 실행
    import sys
    
    def main():
        print("Doing some work...")
        sys.exit()
    
    if __name__ == "__main__":
        main()

2. 프로그램이 비정상적으로 종료될 경우

  • 비정상적인 종료의 예는 다음과 같습니다:
  1. 강제 종료 (Forced Termination):

    • os._exit() 함수를 호출하면 atexit 핸들러는 호출되지 않습니다.
    import os
    
    def main():
        print("Doing some work...")
        os._exit(0)
    
    if __name__ == "__main__":
        main()
  2. 시스템 충돌 (System Crash):

    • 프로그램이 실행 중인 시스템이 충돌하거나 종료되는 경우.
  3. 강제 종료 신호 (Interrupt Signal):

    • SIGKILL 같은 강제 종료 신호를 받는 경우.
    • 예를 들어, 사용자가 kill -9 명령을 사용하여 프로세스를 종료하는 경우.
    import signal
    import os
    
    def handler(signum, frame):
        print("Signal handler called with signal", signum)
    
    signal.signal(signal.SIGTERM, handler)
    
    def main():
        print("Doing some work...")
        # 프로그램을 종료할 수 있도록 일정 시간 대기
        os.kill(os.getpid(), signal.SIGKILL)
    
    if __name__ == "__main__":
        main()
  4. 심각한 예외 (Uncaught Exception):

    • 특정한 예외가 처리되지 않아 프로그램이 종료되는 경우.
    • 코드 에러, keyboard inturrupt 등이 전부 포함된다.
    def main():
        print("Doing some work...")
        raise RuntimeError("Uncaught exception")
    
    if __name__ == "__main__":
        main()
profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글