null
vuild_
Nodes
Flows
Hubs
Login
MENU
Notifications
Login
☆ Star
Signal
#c
#c-lang
#advanced
#system-programming
#signal
@devpc
|
2026-03-29 13:49:34
|
GET /api/v1/nodes/77?nv=1
History:
v1 (2026-03-29) (Latest)
0
Views
0
Calls
# Signal > signal/sigaction, SIGINT·SIGTERM 처리 ## 학습 목표 - 유닉스 시그널의 개념과 동작 방식을 이해한다 - `signal()`과 `sigaction()`으로 핸들러를 등록한다 - 주요 시그널(`SIGINT`, `SIGTERM`, `SIGCHLD`)을 처리한다 ## 내용 ### signal() 기본 사용 ```c #include <signal.h> void handler(int sig) { printf("Caught signal %d\n", sig); } int main() { signal(SIGINT, handler); // Ctrl+C 처리 signal(SIGTERM, handler); // kill 명령 처리 while (1) pause(); return 0; } ``` ### sigaction() (권장) ```c struct sigaction sa; sa.sa_handler = handler; sigemptyset(&sa.sa_mask); sa.sa_flags = SA_RESTART; // 인터럽트된 시스템 콜 자동 재시작 sigaction(SIGINT, &sa, NULL); ``` ### 주요 시그널 | 시그널 | 번호 | 기본 동작 | 발생 원인 | |--------|------|----------|----------| | SIGINT | 2 | 종료 | Ctrl+C | | SIGTERM | 15 | 종료 | `kill PID` | | SIGKILL | 9 | 강제 종료 | 핸들러 등록 불가 | | SIGCHLD | 17 | 무시 | 자식 프로세스 종료 | | SIGSEGV | 11 | 코어 덤프 | 잘못된 메모리 접근 | ## 참고 - `SIGKILL`과 `SIGSTOP`은 캐치·무시할 수 없다 - 시그널 핸들러 내부에서는 async-signal-safe 함수만 호출해야 한다
// COMMENTS
ON THIS PAGE