Skip to content

Instantly share code, notes, and snippets.

@Park-Developer
Created December 25, 2021 01:03
Show Gist options
  • Save Park-Developer/5d10f4fd532b34b714ff6a1741bea843 to your computer and use it in GitHub Desktop.
Save Park-Developer/5d10f4fd532b34b714ff6a1741bea843 to your computer and use it in GitHub Desktop.
linux programming : signal
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
static void printSigset(sigset_t *set);
static void sigHandler(int);
int main(int argc, char **argv){
sigset_t pset;
sigemptyset(&pset); // 모두 0으로 설정
sigaddset(&pset,SIGQUIT); // SIGQUIT와 SIGRTMIN 설정
sigaddset(&pset,SIGQUIT);
sigprocmask(SIG_BLOCK,&pset,NULL);
printSigset(&pset); // 현재 설정된 sigset_t를 화면에 출력
if (signal(SIGINT,sigHandler)==SIG_ERR){ // SIGINT 처리를 위한 핸들러 등록
perror("signal() : SIGINT");
return -1;
}
if (signal(SIGUSR1,sigHandler)==SIG_ERR){ // SIGINT 처리를 위한 핸들러 등록
perror("signal() : SIGUSR1");
return -1;
}
if (signal(SIGUSR2,sigHandler)==SIG_ERR){ // SIGINT 처리를 위한 핸들러 등록
perror("signal() : SIGUSR2");
return -1;
}
if (signal(SIGPIPE,SIG_IGN)==SIG_ERR){ // SIGINT 처리를 위한 핸들러 등록
perror("signal() : SIGPIPE");
return -1;
}
while(1) pause(); // 시그널 처리를 위한 대기
return 0;
}
static void sigHandlert(int signo)
{
if(signo==SIGINT){
printf("SIGINT is catched %d\n",signo);
exit(0);
}else if(signo==SIGUSR1){
printf("SIGUSR1 is catched\n");
}else if(signo==SIGUSR2){
printf("SIGUSR2 is catched\n");
}else if(signo==SIGQUIT){
printf("SIGQUTE is catched\n");
sigset_t uset;
sigemptyset(&uset);
sigaddset(&uset,SIGINT);
sigprocmask(SIG_UNBLOCK,&uset,NULL);
}else{
fprintf(stderr, "Catched signal : %s\n",strsignal(signo));
}
}
static void printSigset(sigset_t *set){
int i;
for(i=1;i<NSIG;i++){
printf((sigismember(set,i)?"1":"0"));
}
putchar('\n');
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment