`SIG_DFL`, `SIG_IGN` 매크로
SIG_DFL, SIG_IGN 매크로 (SIG_DFL, SIG_IGN)
신호가 발생했을 때 프로그램이 "기본 동작"을 할지, 아니면 "그냥 무시"할지를 정하고 싶을 때가 있어요. signal 함수의 두 번째 인자로 함수 포인터를 넘기는데, 여기에 특수한 값 두 개를 쓰면 '내가 만든 핸들러' 대신 표준 동작을 골라 넣을 수 있어요. 그게 SIG_DFL과 SIG_IGN이에요.
출처: cppreference
본문
매크로 정의
<signal.h>에 정의돼 있어요.
#define SIG_DFL /*implementation defined*/
#define SIG_IGN /*implementation defined*/
설명 (Explanation)
SIG_DFL과 SIG_IGN은 어떤 함수의 주소와도 같지 않은 정수 표현식으로 확장돼요. 이 매크로들은 signal() 함수를 위한 신호 처리 전략을 정의해요.
| 상수 | 설명 |
|---|---|
SIG_DFL |
기본 신호 처리(default signal handling) |
SIG_IGN |
신호 무시(signal is ignored) |
예제 (Example)
먼저 특별한 처리 없이 기본 핸들러를 쓰는 모습이에요. SIGTERM이 발생하면 기본 동작(보통 종료)이 이뤄져서, 뒤의 출력은 실행되지 않아요.
#include <signal.h>
#include <stdio.h>
int main(void)
{
/* using the default signal handler */
raise(SIGTERM);
printf("Exit main()\n"); /* never reached */
}
출력:
(none)
이번엔 SIG_IGN으로 SIGTERM을 무시하도록 설정해요. 신호가 발생해도 프로그램은 계속 이어져 Exit main()이 출력돼요.
#include <signal.h>
#include <stdio.h>
int main(void)
{
/* ignoring the signal */
signal(SIGTERM, SIG_IGN);
raise(SIGTERM);
printf("Exit main()\n");
}
출력:
Exit main()
같이 보기 (See also)
signal— 특정 신호에 대한 핸들러 설정SIG_ERR— 신호 처리 오류 표식