#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");
}
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(sigprocmask(SIG_BLOCK,&set,NULL)<0) //加入信号到进程屏蔽
perror("sigprocmask");
else
{
printf("blocked\n");
sleep(3);
}
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);
}
}
}
进程间通信______信号集
最新推荐文章于 2024-10-08 11:28:25 发布