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 답변
-
DB 정리하는 코드를 handler함수로 만든 뒤에 signal.signal()로 이 handler를 등록해야 합니다. 윈도우의 경우
SIGABRT
,SIGFPE
,SIGILL
,SIGINT
,SIGSEGV
,SIGTERM
만signal()
을 쓸 수 있으므로 주의해주세요.#!/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()
댓글 입력