signal

SIGNAL(2)                         리눅스 프로그래머 매뉴얼                        SIGNAL(2)



이름
       signal - ANSI C 시그널 처리

사용법
       #include <signal.h>

       void (*signal(int signum, void (*handler)(int)))(int);

설명
       signal 시스템 콜은 signum 번호의 시그널에 대해 새로운 시그널 핸들러를 설치한다.  시그널 핸들러는 handler로
       설정되고, 사용자 정의 함수이거나 다음 것중의 하나가 될 수 있다:

              SIG_IGN
                     시그널을 무시한다.

              SIG_DFL
                     시그널의 초기 기본 동작을 하도록 한다.

       시그널 핸드러 루틴에 넘겨지는 정수 인자는 시그널 번호이다. 이는 여러 시그널에 대해 하나의 시그널 핸들러를 사용할 수 있게 한다.


반환값
       signal은 이전의 시그널 핸들러의 포인터나, 에러시 SIG_ERR를 리턴한다.


주의
       SIGKILLSIGSTOP에 시그널 핸들러를 지정할 수 없다.

       BSD 시스템과 달리, 리눅스의 시그널은 시그널이 발생했을 때 초기 기본 동작으로 되돌린다.  그러나, <signal.h> 대신에
       <bsd/signal.h>를 포함시키면 signal 은 __bsd_signal로 재정의되어 시그널은 BSD에서와 같이 동작한다.
       signal의 두 가지 버전은 모두 sigaction(2)위에 만들어진 라이브러리 루틴이다.

       이 맨페이지의 프로토타입이 이해되지 않는다면 다음과 같이 분리하는 것이 도움이 될지도 모른다:

       typedef void (*sighandler_t)(int);
       sighandler_t signal(int signum, sighandler_t handler);

       POSIX에 따르면 kill()raise() 함수로 발생시킬 수 없는 SIGFPE, SIGILL 또는 SIGSEGV 시그널을
       무시한 후 프로세스의 동작을 알 수 없다.  0으로 나눠진 정수는 알 수 없는 결과를 낸다.  어떤 아키텍쳐에서는 SIGFPE
       시그널이 발생한다. (-1로 음의 정수를 나누는 것도 SIGFPE를 발생시킨다.) 이 시그널을 무시하면 무한 루프에 빠질 수도
       있다.

       POSIX (B.3.3.1.3)에 따르면 SIGCHLD에 대한 동작은 SIG_IGN으로 설정해서는 안 된다. 여기서 BSD와
       SYSV가 다르다. SIGCHLD의 동작을 SIG_IGN으로 설정하는 BSD 소프트웨어는 리눅스에서는 실패한다.


호환
       ANSI C


관련 항목
       kill(1), kill(2), killpg(2), pause(2), raise(3), sigaction(2), signal(7),
       sigsetops(3), sigvec(2), alarm(2)

역자
       임종균 <hermes44@secsm.org>, 2000년 4월 20일



리눅스 2.0                           1996년 7월 21일                         SIGNAL(2)