설명

sigsuspend() 함수는 시그널 블록을 설정함과 동시에 시그널이 도착할 때 까지 중단합니다.

즉, 아래와 같은 처리가 됩니다.

   sigprocmask( SIG_SETMASK, &sert, NULL);
   pause();

그러나 sigprocmask() 호출과 pause() 호출 사이에도 시그널이 발생할 수 있는데, 이 때 발생한 시그널은 잃어 버릴 수 있다고 합니다. 예를 들어서 어떨 때는 Ctrl-C 한번만 누르면 프로그램이 종료되는데, 어떨 때는 2번 눌러야 종료되는 현상 같은 것이죠. 그러므로 블록 설정과 동시에 시그널 도착을 바로 확인해야 시그널을 잃어 버리는 일이 없을 것입니다. 이렇게 블록 설정과 함께 시그널을 대기하는 함수가 sigsuspend() 함수입니다.

헤더 signal.h
형태 int sigsuspend(const sigset_t *mask);
인수
sigset_t *mask 블록될 시그널 집합
반환
0 성공
-1 실패

예제

#include <stdio.h>
#include <unistd.h>
#include <signal.h>

int main( void)
{
   sigset_t sigset;
   sigset_t oldset;

   // Ctrl-C 를 블록화
   sigemptyset( &sigset);
   sigaddset( &sigset, SIGINT);
   sigprocmask( SIG_BLOCK, &sigset, &oldset);

   // 다시 Ctrl-C를 복구하면서 시그널 대기
   sigsuspend( &oldset);

   return 0;
}
]$ ./a.out
 
]$