SIGINT를 예외 처리하려면?

조회수 5054회

DB에 연결해서 쓰는 프로그램에서 SIGINT(ctrl+c)를 받으면 바로 꺼지는 게 아니라 DB랑 관련된 걸 정리해준 뒤에 프로그램을 종료해야 합니다.

언제 SIGINT가 들어올지 모르니 전체 스크립트를 try-except로 감싸는 건 좀 아닌 것 같고.

Perl에서는 이런 방법을 썼는데 파이썬에서는 어떻게 해야되나요?

소스코드(Perl)

$SIG{'INT'} = 'exit_gracefully';

sub exit_gracefully {
    print "Caught ^C \n";
    exit (0);
}

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    DB 정리하는 코드를 handler함수로 만든 뒤에 signal.signal()로 이 handler를 등록해야 합니다. 윈도우의 경우 SIGABRT, SIGFPE, SIGILL, SIGINT, SIGSEGV, SIGTERMsignal()을 쓸 수 있으므로 주의해주세요.

    #!/usr/bin/env python
    import signal
    import sys
    def signal_handler(signal, frame): #SIGINT handler정의
            print('You pressed Ctrl+C!')
            #DB정리하는 코드
            sys.exit(0)
    signal.signal(signal.SIGINT, signal_handler) #등록
    print('Press Ctrl+C')
    signal.pause()
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)