함수 기능
지정한 시그널의 처리 방식을 등록하는 시스템 호출 함수이다.
함수 원형
#include <signal.h>
sighandler_t signal(int signum, sighandler_t handler);
함수 파라메터
signal
인자에는 시그널 값을 넣는다.
handler
SIG_IGN 상수 , SIG_DFL상수, 시그널 발생시 호출될 함수의 주소를 넣을 수 있다.
함수 예제
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
static void ssu_signal_handler(int signo);
int main(void){
if(signal(SIGINT, ssu_signal_handler)==SIG_ERR){
fprintf(stderr,"cannot handle SIGINT\n");
exit(EXIT_FAILURE);
}
if(signal(SIGTERM, ssu_signal_handler)==SIG_ERR){
fprintf(stderr,"cannot handle SIGTERM\n");
exit(EXIT_FAILURE);
}
if(signal(SIGPROF, SIG_DFL)==SIG_ERR){
fprintf(stderr, "cannot reset SIGPROF\n");
exit(EXIT_FAILURE);
}
if(signal(SIGHUP, SIG_IGN)==SIG_ERR){
fprintf(stderr,"cannot ignore SIGHUP\n");
exit(EXIT_FAILURE);
}
while(1)
pause();
exit(0);
}
static void ssu_signal_handler(int signo){
if(signo == SIGINT)
printf("caught SIGINT\n");
else if(signo ==SIGTERM)
printf("caught SIGTERM\n");
else{
fprintf(stderr,"unexpected signal\n");
exit(EXIT_FAILURE);
}
}
함수 결과
signal을 호출하여 sigint, sigterm에 대한 시그널 핸들러를 등록. ctrl c를 통해 sigint
리눅스시스템 프로그래밍 - 홍지만 저
교재 내에 있는 예제를 바탕으로 작성한 글 입니다.
'C & LINUX' 카테고리의 다른 글
C / LINUX alarm(2) (0) | 2022.05.31 |
---|---|
C / LINUX raise(3) (0) | 2022.05.31 |
C/LINUX _t 자료형 (0) | 2022.05.04 |
C / LINUX execl(3), execv(3), execle(3), execve(2), execlp(3), execvp(3) (0) | 2022.05.02 |
C / LINUX wait(2) waitpid(2) (0) | 2022.05.02 |