signal = software interrupt
kernel -> process or process -> process
자료 전송보다는 비정상적인 상황을 알릴 때 사용한다.
program 수행 중 Ctrl-C (interrupt key)
-> kernel이 문자를 감지한다. 해당 session에 있는 모든 process에게 "SIGINT"라는 signal을 보낸다. 모든 process는 종료. 그러나, shell process는 무시한다.
if (WIFEXITED(status)) // 정상종료
if (WIFSIGNALED(status)) // signal을 받고 종료
#include <sys/types.h>
#include <signal.h>
int kill(pid_t pid, int sig);
signal 수신 시 원하는 행동을 취할 수 있도록 한다.
#include <signal.h>
int sigaction(int signo, const struct sigaction *act, struct sigaction *oact);
struct sigaction {
void (*sa_handler) (int);
sigset_t sa_mask;
int sa_flags;
void (*sa_sigaction) (int, siginfo_t &, void *);
}
signo를 수신하면 취할 행동 지정한다.
한 process에서 무시되는 signal은 exec()후에도 계속 무시된다.
여기 정의된 signal들은, sa_handler에 의해 지정된 함수가 수행되는 동안 blocking 된다.
SA_RESETHAND : handler로부터 복귀 시 signal aaction을 SIG_DFL로 재설정
SA_SIGINFO : sa_handler 대신 sa_sigaction 사용
sigset_t mask1, mask2;
sigemptyset(&mask1);
sigaddset(&mask1, SIGINT);
sigaddset(&mask1, SIGQUIT);
sigfillset(&mask2);
sigdelset(&mask2, SIGCHLD);
#include <signal.h>
unsigned int alarm(unsigned int secs);
#include <signal.h>
int sigprocmask(int how, const sigset_t *eset, sigset_t *oset);
#include <unistd.h>
int pause(void);
signal 도착까지 실행을 임시 중단한다.
signal이 포착되면, 처리 routine 실행 & -1 return