加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

[Linux]信号集和sigprocmask信号屏蔽函数

发布时间:2020-12-14 01:47:04 所属栏目:Linux 来源:网络整理
导读:一、概述 系统提供这样一种能力,就是创建一个信号集,然后传递给信号屏蔽函数,从而屏蔽向该进程发送的信号。 有一点需要注意的是,不能屏蔽SIGKILL和SIGSTOP信号。 信号集是sigset_t类型,是一个屏蔽字,每一位代表一个信号,由下面几个函数初始化和创建。

一、概述

系统提供这样一种能力,就是创建一个信号集,然后传递给信号屏蔽函数,从而屏蔽向该进程发送的信号。

有一点需要注意的是,不能屏蔽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 SIGUSR1n");
    else if (signo == SIGUSR2)
        printf("received SIGUSR2n");
    else
        printf("received signal %dn",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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读