Python - signal

헨도·2022년 12월 2일
0

Python

목록 보기
3/12
post-thumbnail

Python

Signal

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() 함수를 실행하도록 설정

handler() 함수의 signum은 발생한 신호의 숫자 값이며, frame은 프로그램을 실행한 스택 프레임(stack frame)

profile
Junior Backend Developer

0개의 댓글