Python에서 Signal 처리

Jan 12, 2018

Python 스크립트가 예기치 않게 종료했을 때, 어떤 signal에 의해 종료되었는지 확인이 필요한 경우가 있다. 다음 코드를 변형해서 프로그램에 맞게, 적절히 적용할 수 있다.

import signal

# 각각의 signal에 대한 핸들러
def sighandler(signum, frame):
    ''' 시그널 처리 '''
    raise Exception("Signal. %i" % signum)
        
# signal 수신 함수
def register_all_signal():
    ''' 모든 시그널 등록 '''
    for x in dir(signal):
        if not x.startswith("SIG"):
            continue

        try:
            signum = getattr(signal, x)
            signal.signal(signum, sighandler)
        except:
            # signal 등록에 실패하는 경우 표시
            print('Skipping the signal : %s' % x)
            continue

# signal을 수신하는 function 실행
register_all_signal()

이 외에도 종료되는 시점에 무엇인가 실행할 필요가 있을 때는 atexit를 사용할 수 있다.

import atexit

def at_exit_func():
    print "exited."

atexit.register(at_exit_func)