一、概述
系统提供这样一种能力,就是创建一个信号集,然后传递给信号屏蔽函数,从而屏蔽向该进程发送的信号。
有一点需要注意的是,不能屏蔽SIGKILL和SIGStop信号。
信号集是sigset_t类型,是一个屏蔽字,每一位代表一个信号,由下面几个函数初始化和创建。
int sigemptyset(sigset_t *set);int sigfillset(sigset_t *set);int sigaddset(sigset_t *set,int signo);int sigdelset(sigset_t *set,int signo);
屏蔽函数
int sigprocmask(int how,const sigset_t *restrict set,const sigset_t *restrict oset);
二、实例
实例代码中屏蔽了SIGUSR1信号后,任何途径向该进程发送SIGUSR1都不会被接收,SIGUSR2则如常接收。
#include <stdio.h>#include <unistd.h>#include <signal.h>voID sig_usr(int signo){ if (signo == SIGUSR1) printf("received SIGUSR1\n"); else if (signo == SIGUSR2) printf("received SIGUSR2\n"); else printf("received signal %d\n",signo);}int main(voID){ sigset_t s_1; sigemptyset(&s_1); sigaddset(&s_1,SIGUSR1); sigprocmask(SIG_SETMASK,&s_1,NulL); signal(SIGUSR1,sig_usr); signal(SIGUSR2,sig_usr); pause(); printf("continue.\n"); return 0;}总结
以上是内存溢出为你收集整理的[Linux]信号集和sigprocmask信号屏蔽函数全部内容,希望文章能够帮你解决[Linux]信号集和sigprocmask信号屏蔽函数所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)