시그널 핸들링이란?
구분 | SIGINT (2) | SIGTERM (15) | SIGKILL (9) |
의미 | 사용자 중단 요청 (Interrupt) | 정상 종료 요청 (Termination Request) | 강제 종료 (Forced Kill) |
발생 시점 | 주로 사용자가 Ctrl+C 입력 | 일반적으로 kill 명령어 실행시 기본값 | kill -9 또는 시스템 강제 종료 시 |
기본 동작 | 프로세스에 인터럽트 요청 → 정상적인 종료 처리 실행 | 종료 핸들러 실행 기회 제공 | 즉시 강제 종료 |
프로세스 대응 | 무시 가능, 시그널 핸들러로 처리 가능 | 무시 가능, 시그널 핸들러로 처리 가능 | 무시 불가능 (non-maskable, non-catchable) |
우선순위 | 사용자 개입 수준 | 일반 종료 시퀀스 | 최우선, 무조건 종료 |
리소스 정리 | 가능 (시그널 핸들러에서 정리 가능) | 가능 (핸들러 내부에서 리소스 정리 수행 가능) | 불가능 (리소스 누수 위험 있음) |
커널 개입 | 커널이 시그널 전달 → 프로세스 핸들링 | 커널이 시그널 전달 → 프로세스 핸들링 | 커널이 직접 종료 (컨텍스트 무시하고 즉시 종료) |
사용 예시 | 사용자가 Ctrl+C 입력 | kill PID (기본값) | kill -9 PID |
시스템 콜 | kill(pid, SIGINT) | kill(pid, SIGTERM) | kill(pid, SIGKILL) |
프로세스 상태 전이 | Running → Signal Handling → (계속/종료) | Running/Waiting → Terminating → Zombie → Removed | Running/Waiting → Zombie → Removed |
자식 프로세스 처리 | 일반적으로 전파되지 않음 | 애플리케이션 설정에 따라 자식에게도 전파 가능 | 자식 프로세스 포함 전체 강제 종료 (kill -9 트리 구조 시) |
비동기성 | 처리 핸들링 가능 (시그널 핸들러 등록) | 비동기적으로 처리 가능 | 즉시 처리됨, 핸들링 불가 |
SIGTERM 은 "정중한 종료 요청"으로, 프로세스에게 "작업을 마무리하고 종료해달라"는 의미이며, SIGKILL 은 "즉각적인 강제 종료 명령"으로 프로세스에게 어떤 기회도 주지 않고 즉시 종료시킨다.
SIGTERM (15) - 정상적인 종료 요청
SIGKILL (9) - 강제 종료

