특정 프로세스가 다른 프로세스에게 보내는 신호.
인터럽트와 반대로 소프트웨어적인 이벤트에 속한다.
#include <stdio.h>
#include <signal.h>
int alarmFlag = 1;
void alarmHandler() {
printf("An alarm clock signal was received \n");
alarmFlag = 0;
}
void main() {
signal(SIGALARM, alarmHandler);
alarm(3);
printf("Looping... \n");
while(alarmFlag)
pause();
printf("Loop ends due to alarm signal \n");
}
signal(SIGALRM, alarmHandler); // 시그널 처리기 설치.
: SIGALRM에 해당되면 핸들러 실행.
// 기본형 : signal(int signum, void(*handler function)(int))
// SIGALRM = 알람 클락 시그널로 해당 알람이 끝나면 발생되는 시그널
alarm(3);
: 3초 동안 알람 실행
while(alarmFlag)
ㅤㅤpause();
: alarmFlag가 1이면 대기.
결론 : alarm이 울리고 3초가 지나면 SIGALRM이 발동되어 alarmHandler가 호출되어 alarmFlag가 0이 되면 main함수가 종료된다.
#include <stdio.h>
#include <signal.h>
void main() {
void (*oldHandler)();
printf("I can be Control-C'ed \n");
sleep(3);
oldHandler = signal(SIGINT, SIG_IGN);
printf("I'm protected from Control-C now \n");
sleep(3);
signal(SIGINT, oldHandler);
printf("I can be Control-C'ed again \n");
sleep(3);
printf("Bye! \n");
}
sleep(3);
: 3초간 작업 대기 상태로.
oldHandler = signal(SIGINT, SIG_IGN);
: 이전 처리기 값을 oldHandler에 저장한다.
// SIGINT : 인터럽트로 Ctrl+c 입력 시 발생하는 시그널.
// SIG_IGN : 시그널을 무시하도록 설정. 단, SIGKILL과 SIGSTOP은 무시할 수 없다.