zoukankan      html  css  js  c++  java
  • [Linux]信号集和sigprocmask信号屏蔽函数

    一、概述

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

    有一点需要注意的是,不能屏蔽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;
    }
  • 相关阅读:
    SQL关闭连接,及分离数据库
    C# 用户选择单个压缩-系统自带压缩
    设计模式7大原则--01
    httpclient
    Mac idea 常用命令
    集合整理
    几种简单的排序算法
    基础数据结构简介
    git 常用命令3
    git 常用命令2
  • 原文地址:https://www.cnblogs.com/yiyide266/p/10653708.html
Copyright © 2011-2022 走看看