void (*signal(int signum, void (*handler)(int)))(int);
(RETURN)
void *()(int) 이전에 설정된 시그널 핸들러
예제
#include <signal.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void signalhandler(int sig)
{
if (sig == SIGINT)
{
printf("\nthis program will stop in 3 seconds..\n");
sleep(3);
exit(0);
}
if (sig == SIGQUIT)
printf("\nsignal SIGQUIT\n");
}
int main()
{
signal(SIGINT, signalhandler);
signal(SIGQUIT, signalhandler);
printf("input Ctrl+C or Ctrl+\\ \n");
while(1);
}
int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact)
시그널보다 향상된 기능을 제공하는 시그널 처리를 결정해준다.
인수 : int signum 시그널 번호
struct sigaction *act 설정할 행동. 즉, 새롭게 지정할 처리 행동
struct sigaction *oldact 이전 행동, 이 함수를 호출하기 전에 지정된 행동 정보가 입력됩니다.
struct sigaction
{
void (*sa_handler)(int); // 시그널을 처리하기 위한 핸들러.
// SIG_DFL, SIG_IGN 또는 핸들러 함수
void (*sa_sigaction)(int, siginfo_t *, void *); // 밑의 sa_flags가 SA_SIGINFO일때
// sa_handler 대신에 동작하는 핸들러
sigset_t sa_mask; // 시그널을 처리하는 동안 블록화할 시그널 집합의 마스크
int sa_flags; // 아래 설명을 참고하세요.
void (*sa_restorer)(void); // 사용해서는 안됩니다.
}
int sigemptyset(sigset_t *set);
시그널 집합 변수의 내용을 모두 제거
int sigaddset(sigset_t *set, int signum);
시그널 집합에 변수의 내용 추가
int kill(pid_t pid, int sig);
pid 의미
양수 : 지정한 프로세스 ID에만 시그널을 전송
0 : 함수를 호출하는 프로세스와 같은 그룹에 있는 모든 프로세스에 시그널을 전송
-1 : 함수를 호출하는 프로세스가 전송할 수 있는 권한을 가진 모든 프로세스에 시그널을 전송
-1 : 이외의 음수 첫 번째 인수 pid 의 절대값 프로세스 그룹에 속하는 모든 프로세스에 시그널을 전송