signal은 특정 신호를 수신했을 때, 사용자가 정의한 함수를 호출하도록 한 모듈이다.
Ex. 10초에 한번씩 대기중 출력하며, 사용자의 입력을 기다린다.
import time
while True :
print("대기중...")
time.sleep(10)
대기중 ...
대기중 ...
Traceback (most recent call last):
File "c:\Users\전은배\Desktop\test\test.py", line 5, in <module>
time.sleep(10)
KeyboardInterrupt
보통 "CTRL + C" 를 누르면 키보드 인터럽트가 발생하여 프로그램이 중단된다.
그런데 사용자가 실수나 고의로 "CTRL+C"를 누르더라도 프로그램이 종료되지 않으려면?
"CTRL+C" 같은 키보드 인터럽트(SIGINT) 신호를 감지하고 다르게 동작하려면 signal 모듈 사용
import time
import signal
def handler(signum, frame) :
print("CTRL+C 신호를 수신하였습니다.")
signal.signal(signal.SIGINT, handler)
while True :
print("대기중 ...")
time.sleep(10)
대기중...
대기중...
Ctrl+C 신호를 수신했습니다.
이 프로그램을 종료하려면 "CTRL+Break"키를 입력해야한다.
"CTRL+C"키는 키보드 인터럽트(SIGINT)에 해당한다.
따라서 "signal.signal(signal.SIGINT, handler)"처럼 SIGINT 신호가 발생할 때는
handler() 함수의 signum은 발생한 신호의 숫자 값이며, frame은 프로그램을 실행한 스택 프레임(stack frame)