一、概述
系统提供这样一种能力,就是创建一个信号集,然后传递给信号屏蔽函数,从而屏蔽向该进程发送的信号。
有一点需要注意的是,不能屏蔽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 "); else if (signo == SIGUSR2) printf("received SIGUSR2 "); else printf("received signal %d ", 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. "); return 0; }