PYTHON · 예외처리
그레이스풀 종료
시그널 핸들링으로 프로그램을 안전하게 종료하고 리소스를 정리합니다.
예외처리중급signal종료gracefulatexit
핵심 설명
시그널 핸들링으로 프로그램을 안전하게 종료하고 리소스를 정리합니다.
Python code
import signal
import sys
import atexit
# atexit: 프로그램 종료 시 실행
def cleanup():
print(" 정리 작업 수행 중...")
print(" 리소스 해제 완료")
atexit.register(cleanup)
# 시그널 핸들러
class GracefulShutdown:
def __init__(self):
self.should_stop = False
signal.signal(signal.SIGTERM, self._handler)
signal.signal(signal.SIGINT, self._handler)
def _handler(self, signum, frame):
sig_name = signal.Signals(signum).name
print(f"\n{sig_name} 수신, 종료 중...")
self.should_stop = True
# 사용 예시
shutdown = GracefulShutdown()
# 워커 루프 시뮬레이션
import time
for i in range(3):
if shutdown.should_stop:
print("안전하게 종료합니다")
break
print(f"작업 {i+1} 처리 중...")
time.sleep(0.1)
# try/finally 패턴
class Resource:
def __init__(self, name):
self.name = name
print(f" {name} 획득")
def close(self):
print(f" {self.name} 해제")
r = Resource("DB 연결")
try:
print(" 작업 수행")
finally:
r.close()
print("프로그램 정상 종료")학습 팁
장기 실행 서비스에서는 SIGTERM 핸들러를 등록하여 진행 중인 작업을 완료한 후 종료하세요.
주의할 점
SIGKILL(kill -9)은 핸들링할 수 없습니다. 반드시 SIGTERM을 먼저 보내고 시간을 줘야 합니다.
자주 묻는 질문
그레이스풀 종료란 무엇인가요?
시그널 핸들링으로 프로그램을 안전하게 종료하고 리소스를 정리합니다.
그레이스풀 종료 학습 시 주의할 점은 무엇인가요?
SIGKILL (kill -9)은 핸들링할 수 없습니다. 반드시 SIGTERM 을 먼저 보내고 시간을 줘야 합니다.
Continue Learning
Python 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.