`SIG_DFL`, `SIG_IGN` 매크로

SIG_DFL, SIG_IGN 매크로 (SIG_DFL, SIG_IGN)

신호가 발생했을 때 프로그램이 "기본 동작"을 할지, 아니면 "그냥 무시"할지를 정하고 싶을 때가 있어요. signal 함수의 두 번째 인자로 함수 포인터를 넘기는데, 여기에 특수한 값 두 개를 쓰면 '내가 만든 핸들러' 대신 표준 동작을 골라 넣을 수 있어요. 그게 SIG_DFLSIG_IGN이에요.

출처: cppreference

본문

매크로 정의

<signal.h>에 정의돼 있어요.

#define SIG_DFL /*implementation defined*/
#define SIG_IGN /*implementation defined*/

설명 (Explanation)

SIG_DFLSIG_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 — 신호 처리 오류 표식