설명

sigpending() 함수를 사용하면 시그널을 블록된 상태에서 어떤 시그널이 발생해서 블록되었는지를 알 수 있습니다. 즉, 발생했지만 블록되어 대기 중인 시그널이 무엇인지를 확인합니다.

헤더 signal.h
형태 int sigpending(sigset_t *set);
인수
sigset_t *set 블록화된 시그널 집합을 담을 변수
반환
0 성공
-1 실패

예제

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

int main( void)
{
   sigset_t sigset;
   sigset_t pendingset;
   int      ndx = 0;

   // 모든 시그널을 블록화
   sigfillset( &sigset);
   sigprocmask( SIG_SETMASK, &sigset, NULL);

   while( 1 )
   {
      printf( "카운트: %d\n", ndx++);
      sleep( 1);
      if ( 0 == sigpending( &pendingset))
      {
         if ( sigismember( &pendingset, SIGINT))
         {
            printf( "Ctrl-C를 누르셨죠. 무한 루프를 종료합니다.\n");
            break;
         }
      }
   }
   return 0;
}
]$ ./a.out
카운트: 0
카운트: 1
카운트: 2
카운트: 3                   <--- Ctrl-C 키를 누름
Ctrl-C를 누르셨죠. 무한 루프를 종료합니다.
]$