설명

시그널 처리를 설정합니다. 즉,

  • 어떤 시그널이 발생하면 기존 방법으로 처리할지
  • 아니면 무시하게 할지
  • 프로그램에서 직접 처리할지를 설정할 수 있습니다.

설정하는 옵션에는 위의 분류에서처럼 3가지가 있습니다.

유형 의미
SIG_DFL 기존 방법을 따른다.
SIG_IGN 시그널을 무시한다.
함수이름 시그널이 발생하면 지정된 함수를 호출한다.

 

헤더 #include <signal.h>
형태 void (*signal(int signum, void (*handler)(int)))(int);
인수
int signum  시그널 번호
void (*handler)(int)  시그널을 처리할 핸들러
반환
void *()(int); 이전에 설정된 시그널 핸들러

예제

// 아래 예제에서는 while() 문을 이용하여 계속 문자열을 출력하면서
// Ctrl-C 로 SIGINT가 발생하면 바로 종료하는 것이 아니라
// 프로그램에서 작성된 함수를 실행한 후에
// 다시 Ctrl-C 키가 눌리면 기존의 방법에 따라
// 프로세스가 종료되는 것을 보여 줍니다.


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

void (*old_fun)( int);

void sigint_handler( int signo)
{
   printf( "Ctrl-C 키를 눌루셨죠!!\n");
   printf( "또 누르시면 종료됩니다.\n");
   signal( SIGINT, old_fun);   // 또는 signal( SIGINT, SIG_DFL);
}

int main( void)
{
   old_fun = signal( SIGINT, sigint_handler);
   while(1 )
   {
      printf( "forum.falinux.com\n");
      sleep( 1);
   }
}
]$ ./a.out
forum.falinux.com
forum.falinux.com
Ctrl-C 키를 눌루셨죠!!
또 누르시면 종료됩니다.
forum.falinux.com
forum.falinux.com
forum.falinux.com

]$