SIGNAL(3)

명칭
signal - 단순화 된 소프트웨어 시그널 기능

서식
#include <signal.h> void * signal(int sig, void *funcintint) or in FreeBSD's equivalent but easier to read typedef'd version: typedef void *sig_t int sig_t signal(int sig, sig_t func)

해설
이 signal() 기능은, 좀 더 일반적인 sigaction(2) 기능에의 단순화 되었다 인터페이스입니다.

시그널에 의해, 그 도메인외의 프로세스의 조작이 가능하게 되어, 프로세스가 자신 또는 자신의 카피(child process)를 조작할 수 있습니다. 시그널에는 다음의 2 개의 일반적인 타입이 있습니다. 프로세스를 종료시키는 것, 및 그렇지 않는 것입니다. 프로그램의 종료를 발생시키는 시그널은, 회복 불가능한 에러의 결과인 일도 있고, 「세치기」캐릭터를 입력하는 단말의 유저의 결과인 일도 있습니다. 시그널이 사용되는 것은, 프로세스가 정지되었을 때입니다. 백그라운드에 있으면서 제어 단말에 액세스 할 필요가 있기 때문입니다 ( tty(4) (을)를 참조 ) 프로세스가 정지된 후, 재개될 때, child process의 스테이터스가 변화했을 때, 또는 입력이 제어 단말로 준비가 되어 있을 때입니다. 처치가 행해지지 않는 경우, 대부분의 시그널은 시그널을 받는 프로세스의 종료라고 한다 결과가 됩니다. 시그널에 따라서는, 대신에 프로세스가 시그널을 받고 나서 정지시키는 것도 있고, 프로세스가 다른 요구 를 하고 있지 않은 경우는 단지 폐기되는 것도 있습니다. SIGKILL 시그널과 SIGSTOP 시그널을 제외해, signal() 함수는, 시그널을 포착, 무시, 또는 끼어들어 생성할 수 있도록(듯이) 합니다. 이러한 시그널은 파일 <signal.h> 에 정의되고 있습니다.
이름 | 디폴트 처치 | 설명
SIGHUP | 프로세스의 종료 | 단말 라인의 행업
SIGINT | 프로세스의 종료 | 프로그램에 끼어든다
SIGQUIT | core image 작성 | 프로그램을 종료한다
SIGILL | core image 작성 | 부정 인스트럭션
SIGTRAP | core image 작성 | 트랩을 추적한다
SIGABRT | core image 작성 abort(2)
호출 (이전에는 SIGIOT)
SIGEMT | core image 작성 | 에뮤레이트 인스트럭션이 실행된다
SIGFPE | core image 작성 | 부동 소수점 예외
SIGKILL | 프로세스의 종료 | 프로그램을 말소한다
SIGBUS | core image 작성 | 버스 에러
SIGSEGV | core image 작성 | 부분화 침범
SIGSYS | core image 작성 | 부존재의 시스템 콜을 호출한다
SIGPIPE | 프로세스의 종료 | 리더(reader)가 없는 파이프에 기입한다
SIGALRM | 프로세스의 종료 | 리얼 타이머가 마감 시간
SIGTERM | 프로세스의 종료 | 소프트웨어 종료 시그널
SIGURG | 시그널을 폐기 | 소켓상에 존재하는 긴급 상황
SIGSTOP | 프로세스의 정지 | 정지한다(포착 또는 무시할 수 없다)
SIGTSTP | 프로세스의 정지 | 키보드로부터 생성된 시그널을 정지한다
SIGCONT | 시그널을 폐기 | 정지의 뒤도 계속한다
SIGCHLD | 시그널을 폐기 | 자 스테이터스가 변화했다
SIGTTIN | 프로세스 정지 | 제어 단말로부터 시도된 백그라운드 독해
SIGTTOU | 프로세스 정지 | 제어 단말에 대해 시도된 백그라운드 기입
SIGIO | 시그널을 폐기 |
기술자상에서 입출력이 가능 ( fcntl(2) (을)를 참조)
SIGXCPU | 프로세스의 종료 | 프로세스 cpu 시간제한을 초과 (
setrlimit(2) (을)를 참조)
SIGXFSZ | 프로세스의 종료 | 파일 사이즈 제한을 초과 (
setrlimit(2) (을)를 참조)
SIGVTALRM | 프로세스의 종료 | 가상 시간 알람 (
setitimer(2) (을)를 참조)
SIGPROF | 프로세스의 종료 | 프로파일화 타이머 알람 (
setitimer(2) (을)를 참조)
SIGWINCH | 시그널을 폐기 | 윈도우 사이즈의 변화
SIGINFO | 시그널을 폐기 | 키보드로부터의 스테이터스 요구
SIGUSR1 | 프로세스의 종료 | 유저 정의 시그널 1
SIGUSR2 | 프로세스의 종료 | 유저 정의 시그널 2

sig 파라미터는 어느 시그널이 수신되었는지를 지정합니다. func 프로시저는, 유저가 시그널 수신시에 처치를 선택할 수 있도록(듯이) 합니다. 상기에 리스트 한 것처럼 발생하도록(듯이) 시그널의 디폴트 처치를 설정하려면 , func 하 SIG_DFL 이다 필요가 있습니다. SIG_DFL (은)는, 디폴트의 처치를 리셋트 합니다. 시그널을 무시하기 위해서는, func 하 SIG_IGN (으)로 할 필요가 있습니다. 이것에 의해, 후속의 시그널의 인스턴스가 무시되어 중단중의 인스턴스가 폐기됩니다. SIG_IGN 하지만 사용되지 않는 경우는, 그 이상으로 발생한 시그널은 자동적으로 블록 되어 func 하지만 불려 갑니다.

취급되는 시그널은, 함수가 돌아올 때는 블록 되지 않고, 시그널이 발생했을 때에 프로세스는 중단했는데로부터 계속합니다. 이전의 시그널 기능과 달리, 핸들러 func()는 시그널이 전달된 후도 인스톨 된 채로 있습니다.

시스템 콜에 따라서는, 호출이 실행중에 시그널이 포착되어 호출이 완료전에 종료되었을 경우, 호출이 자동적으로 재개됩니다 (핸들러는 sigaction(2) 그리고 SA_RESTART 플래그를 사용해 인스톨 됩니다). 영향을 받는 시스템 콜에는, 통신 채널상 또는 저속 디바이스상 및 ioctl(2) 또는 wait(2) 의 사이의, read(2), write(2), sendto(2), recvfrom(2), sendmsg(2), 및 recvmsg(2) 하지만 포함됩니다. 그러나, 이미 위탁 끝난 호출은 재개시 되지 않고, 대신에 부분적인 처리 성공이 돌려주어집니다 (예를 들어, 짧은 독해 카운트 ).

시그널 핸들러를 인스톨 한 프로세스가 포크 하면(자), child process는 시그널을 계승합니다. 포착된 모든 시그널이, execve(2) 함수의 호출에 의해, 디폴트의 처치로 리셋트 됩니다. 무시된 시그널은 무시된 채로 있습니다.

반환값
호출이 성공하면(자), 직전의 처치가 돌려주어집니다. 그렇지 않은 경우, SIG_ERR 가 돌려주어져 글로벌 변수 errno 하지만 설정되어 에러를 나타냅니다.

에러
signal() (은)는 다음 중 1 개(살)이 발생하면(자) 처리 실패해, 처치는 취해지지 않습니다.

[EINVAL]
    Sig (은)는 유효한 시그널 번호가 아닙니다.

[EINVAL]
    SIGKILL 또는 SIGSTOP 에 대한 핸들러를 무시 또는 지정하려고 하는 시도를 합니다.

관련 항목
kill(1), kill(2), ptrace(2), sigaction(2), sigaltstack(2), sigprocmask(2), sigsuspend(2), fpsetmask(3), setjmp(3), tty(4)

역사
이 signal 기능은 4.0BSD 그리고 나타났습니다.