linux进程间通信方式之信号处理signal

来源:互联网 发布:中国软件重组预期 编辑:程序博客网 时间:2024/05/01 18:35
#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <strings.h>#include <string.h>#include <signal.h>#include <syslog.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>//linux进程间通信方式之信号处理signal//sighandler_t signal(int signum, sighandler_t handler);//signal()会依参数signum 指定的信号编号来设置该信号的处理函数。//即修改系统默认信号的操作//成功则返回值为以前的信号处理函数/*    int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);    参数1:SIG_BLOCK:屏蔽集合中信号    SIG_UNBLOCK:解除信号屏蔽*///捕获处理函数void  handler(int sig){    if(sig == SIGQUIT){        printf("recv sigquit\n");//接收到sigquit    }}int main(void){    //屏蔽信号    sigset_t set;    //sigemptyset用来将参数set信号集初始化并清空。    sigemptyset(&set);//int sigemptyset(sigset_t *set);    //sigaddset()用来将参数signum 代表的信号加入至参数set 信号集里。    sigaddset(&set,SIGINT);//int sigaddset(sigset_t *set, int signum);    sigaddset(&set,SIGQUIT);    sigaddset(&set,SIGHUP);    sigprocmask(SIG_BLOCK,&set,NULL);//信号屏蔽    //注册信号处理方式    signal(SIGHUP,SIG_DFL);  //默认处理 关闭终端    signal(SIGINT,SIG_IGN); //忽略处理 CTRL+C    signal(SIGQUIT,handler);  //捕获处理 指定函数    sleep(3);    //解除屏蔽    sigprocmask(SIG_UNBLOCK,&set,NULL);    printf("signal ok\n");    while(1)        sleep(1);}/*$ ./a.outsignal ok^\recv sigquit^\recv sigquit^\recv sigquit^C^C^C^C*/
阅读全文
0 0
原创粉丝点击