进程间通信______信号集

来源:互联网 发布:剑三抓马坐标数据下载 编辑:程序博客网 时间:2024/04/28 18:53
#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");elseprintf("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);}}}

0 0
原创粉丝点击