/*int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
功能描述:设定对信号屏蔽集内的信号的处理方式(阻塞或不阻塞)。
用法:
#include <signal.h>
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
参数:
how:用于指定信号修改的方式,可能选择有三种

SIG_BLOCK //加入信号到进程屏蔽。
SIG_UNBLOCK //从进程屏蔽里将信号删除。
SIG_SETMASK //将set的值设定为新的进程屏蔽。

set:为指向信号集的指针,在此专指新设的信号集,如果仅想读取现在的屏蔽值,可将其置为NULL。
oldset:也是指向信号集的指针,在此存放原来的信号集。
返回说明:
成功执行时,返回0。失败返回-1,errno被设为EINVAL。
*/
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
static void sig_quit(int signo)
{
        printf("caught sigouit/n");
        signal(SIGQUIT,SIG_DFL);
}
int main()
{
        sigset_t newmask;
        sigset_t oldmask;
        sigset_t pendmask;
        signal(SIGQUIT,sig_quit);
        sigemptyset(&newmask);
        sigaddset(&newmask,SIGQUIT);
        sigprocmask(SIG_BLOCK,&newmask,&oldmask);//把newmask中的SIGQUIT信号阻塞,并把当前放到oldmask中
        printf("/nbefore sleep first 5 sec/n");
        sleep(5);//休眠5秒钟,这里做说明:在5s休眠期间,任何SIGQUIT信号都会被阻塞,如果在5s内收到任何键盘的quit信号,则此时会把这些信息存在内核的队列中,等待5s结束后,可能要处理此信号。
        printf("/nafter sleep first 5 sec/n");
        sigpending(&pendmask);//得到挂起信号集合
        if(sigismember(&pendmask,SIGQUIT))//检查挂起信号集合中是否有SIGQUIT
        {
                printf("/nSIGQUIT pending/n");
        }
        sigprocmask(SIG_SETMASK,&oldmask,NULL);恢复原来的信号集T(这个信号即是oldmask)
        printf("        sigquit unblocked/n");
        sleep(5);
        printf("/after sleep second 5 sec/n");
        return 0;

}

/*
以上示例是Linux redhat,
执行结果是
$./a.out
^/                        /**此处使用"CTRL+/" 产生SIGQUIT */
/*
SIGQUIT pending
caught SIGQUIT 在sigprocmask返回之前处理阻塞信号SIGQUIT,输出它
SIGQUIT unblocked
^/Quit (coredump)//因为已经被设置为缺省值,所以再次产生SIGQUIT 信号,直接退出
*/

sigprocmask理解相关推荐

  1. linux sigprocmask函数理解

    2019独角兽企业重金招聘Python工程师标准>>> man sigprocmask: NAMEsigprocmask - examine and change blocked s ...

  2. 2信号处理之:信号产生原因,进程处理信号行为,信号集处理函数,PCB的信号集,sigprocmask()和sigpending(),信号捕捉设定,sigaction,C标准库信号处理函数,可重入函数,

     1信号产生原因 2.进程处理信号行为 manpage里信号3中处理方式: SIG_IGN SIG_DFL                                            默 ...

  3. linux 信号signal和sigaction理解

    转载:http://blog.csdn.net/beginning1126/article/details/8680757 今天看到unp时发现之前对signal到理解实在浅显,今天拿来单独学习讨论下 ...

  4. 计算机系统性错误,《深入理解计算机系统-异常》

    现代操作系统通过使控制流发生突变来对某些意外情况(磁盘读写数据准备就绪.硬件定时器产生信号等)做出反应.一般而言,我们把这些突变命名为异常控制流(Exceptional Contral Flow EC ...

  5. Linux进程信号(产生、保存、处理)/可重入函数概念/volatile理解/SIGCHLD信号

    首先区分一下Linux信号跟进程间通信中的信号量,它们的关系就犹如老婆跟老婆饼一样,没有一毛钱的关系. 信号的概念 信号的概念:信号是进程之间事件异步通知的一种方式,属于软中断.比如:红绿灯是一种信号 ...

  6. 深入理解计算机系统(CSAPP)含lab详解 完结

    文章目录 深入理解计算机操作系统-第一章 1.1 信息就是位 + 上下文 1.2 程序被其他程序翻译成不同的格式 1.3 了解编译系统如何工作是大有益处的 1.4 处理器读并解释储存在内存中的指令 1 ...

  7. 深入理解Linux进程间通信(IPC)-- 信号signal

    2. 信号(上) 2.1. 信号及信号来源 2.1.1 信号本质 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的.信号是异步的,一个进程不 ...

  8. 通用解题法——回溯算法(理解+练习)

    积累算法经验,积累解题方法--回溯算法,你必须要掌握的解题方法! 什么是回溯算法呢? 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就&quo ...

  9. stream流对象的理解及使用

    我的理解:用stream流式处理数据,将数据用一个一个方法去 . (点,即调用) 得到新的数据结果,可以一步达成. 有多种方式生成 Stream Source: 从 Collection 和数组 Co ...

最新文章

  1. 如何改进YOLOv3使其更好应用到小目标检测(比YOLO V4高出4%)
  2. c语言程序设计 赵宏,C语言程序设计(模块化程序设计I )(6页)-原创力文档...
  3. 初步了解BIM模型和超图相关操作
  4. 解题报告——习题2-5 分数化小数(decimal) 输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。
  5. java日期时间转日期_Java时间和日期指南
  6. nginx 1.9.9 Linux 环境安装
  7. 【英语学习】【WOTD】disparage 释义/词源/示例
  8. SpringCloud工作笔记057---常用免费数据接口
  9. 业务展示类网站高保真原型模板库、企业品牌官网、公司业务介绍、产品展示及营销、首页模板、内页模板、单页模板、整站模板、导航、轮播、横幅、列表、客户、案例、页脚、动态面板、母版、页面事件、窗口函数
  10. python menu实例_python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例...
  11. java 拦截器 排除_java – Spring MVC Interceptor排除HTTP方法的路径
  12. Android 长按Button出现一个菜单
  13. 笔记本指纹识别linux版驱动程序,联想Thinkpad指纹识别驱动
  14. 表格类产品标签的制作
  15. 一些常用外设DHT11,sg90
  16. 数据挖掘—Apriori算法
  17. 计算机安全模式无法启动,电脑安全模式启动不了怎么办
  18. 剑指offer-二叉树中值等于某个数的路径
  19. 分享文案、表白网页、电影 祝各位都能追到女神!
  20. 蕴含命题遇到的疑惑和解答

热门文章

  1. hive导数据到mysql 自增主键出错_老大问我:“建表为啥还设置个自增 id ?用流水号当主键不正好么?”...
  2. 请写出sfr和sbit的语句格式_单片机c语言的sbit和sfr
  3. java蓝桥杯的题_Java蓝桥杯试题集——算法训练ALGO-116——最大的算式
  4. java 不知道类名_Java 中获取类名的三种方法,你知道几种?
  5. IDEA一直提示 错误: 找不到或无法加载主类
  6. Future获取线程返回值能使线程顺序执行?
  7. 通过 “函数对象”看javascript函数
  8. 创新时代的管理:《创新赢天下》
  9. 走进JavaWeb技术世界7:Tomcat中的设计模式
  10. Linux下获取详细硬件信息的工具:Dmidecode命令详解