📄 sigaction_new.c
字号:
/*sigaction.c*/
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
/*自定义的信号处理函数*/
void my_func(int signum)
{
printf("If you want to quit,please try SIGQUIT\n");
}
void my_func2(int signum)
{
printf("signal block check\n");
}
int main()
{
sigset_t set,pendset;
struct sigaction action1,action2;
/*初始化信号集为空*/
if(sigemptyset(&set)<0)
perror("sigemptyset");
/*将相应的信号加入信号集*/
if(sigaddset(&set,SIGQUIT)<0)
perror("sigaddset");
if(sigaddset(&set,SIGINT)<0)
perror("sigaddset");
if(sigaddset(&set,SIGRTMIN)<0)
perror("sigaddset");
/*设置信号集屏蔽字*/
sigemptyset(&action1.sa_mask);
// sigaddset(&action1.sa_mask,SIGINT);
action1.sa_handler=my_func;
action1.sa_flags=0;
sigaction(SIGRTMIN,&action1,NULL);
sigemptyset(&action2.sa_mask);
// sigaddset(&action2.sa_mask,SIGQUIT);
action2.sa_handler = my_func2;
action2.sa_flags=0;
sigaction(SIGINT,&action2,NULL);
if(sigprocmask(SIG_BLOCK,&set,NULL)<0)
perror("sigprocmask");
else
{
printf("blocked\n");
sleep(5);
}
if(sigprocmask(SIG_UNBLOCK,&set,NULL)<0)
perror("sigprocmask");
else
printf("unblock\n");
//对相应的信号进行循环处理
while(1){
/* if(sigismember(&set,SIGINT)){
sigemptyset(&action1.sa_mask);
action1.sa_handler=my_func;
sigaction(SIGINT,&action1,NULL);
}else if(sigismember(&set,SIGQUIT)){
sigemptyset(&action2.sa_mask);
action2.sa_handler = SIG_DFL;
sigaction(SIGTERM,&action2,NULL);
}*/
printf("checking!!!!\n");
sleep(2);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -