使用 man sigaction 查看手册,对sa_mask的描述是这样的:

sa_mask  specifies  a  mask  of  signals which should be blocked (i.e., added to the signal mask of the thread in which the signal handler is invoked) during execution of the signal handler.  In addition, the signal which triggered the handler will be blocked, unless the SA_NODEFER flag is used.

我的理解是:如果将某个信号加入sa_mask信号集,那么在触发该信号并且执行回调函数之后期间,如果再有这个信号触发,将被阻塞。即不能同时执行两个相同的信号处理函数。

参考sigaction()之sa_mask这篇文章的说法:

sigset_t sa_mask 是一个信号集,在调用该信号捕捉函数之前,将需要block的信号加入这个sa_mask,仅当信号捕捉函数正在执行时,才阻塞sa_mask中的信号,当从信号捕捉函数返回时进程的信号屏蔽字复位为原先值。

Q1:这个复位动作是sigaction函数内部处理,还是由调用者自己处理呢?

  由sigaction函数自动复位,不用我自己再去处理。

Q2:设置sa_mask的目的?

  在调用信号处理程序时就能阻塞某些信号。注意仅仅是在信号处理程序正在执行时才能阻塞某些信号,如果信号处理程序执行完了,那么依然能接收到这些信号。
在信号处理程序被调用时,操作系统建立的新信号屏蔽字包括正被递送的信号,也就是说自己也被阻塞,除非设置了SA_NODEFER。
        因此保证了在处理一个给定的信号时,如果这种信号再次发生,通常并不将它们排队,所以如果在某种信号被阻塞时它发生了5次,那么对这种信号解除阻塞后,其信号处理函数通常只会被调用一次。

Q3:对于不同信号,当信号A被捕捉到并且信号A的handler正被调用时,信号B产生了,
  如果信号B没有被设置阻塞,那么正常接收信号B并调用自己的信号处理程序。另外,如果信号A的信号处理程序中有sleep函数,那么当进程接收到信号B并处理完后,sleep函数立即返回(如果睡眠时间足够长的话)
  如果信号B有被设置成阻塞,那么信号B被阻塞,直到信号A的信号处理程序结束,信号B才被接收并执行信号B的信号处理程序。

如果在信号A的信号处理程序正在执行时,信号B连续发生了多次,那么当信号B的阻塞解除后,信号B的信号处理程序只执行一次。

如果信号A的信号处理程序没有执行或已经执行完,信号B不会被阻塞,正常接收并执行信号B的信号处理程序。
Q4:对于相同信号,当一个信号A被捕捉到并且信号A的handler正被调用时

又产生了一个信号A,第二次产生的信号被阻塞,直到第一次产生的信号A处理完后才被递送;

如果连续产生了多次信号,当信号解除阻塞后,信号处理函数只执行一次。

sigaction函数中关于sa_mask的解释相关推荐

  1. sigaction函数中 SA_NODEFER与sa_mask之间

    函数原型: int sigaction(int signo, struct sigaction *act, struct sigaction *oldact) ; signo :需要处理的特定的信号 ...

  2. 修饰符在python函数中的用法详细解释

    python修饰符是实现一个函数嵌套的功能,比较以下两个函数 # -*- coding:utf-8 -*- def a(fn):print 'a'def d(st):print "----- ...

  3. UNIX环境编程学习笔记(25)——信号处理进阶学习之 sigaction 函数

    lienhua34 2014-11-05 sigaction 函数跟 signal 函数一样,用于设置信号处理函数.此函数是用于取代 UNIX 早期版本使用的 signal 函数.UNIX 早期版本的 ...

  4. linux中signal函数返回值,signal函数、sigaction函数及信号集操作函数

    信号是与一定的进程相联系的.也就是说一个进程可以决定在进程中对哪些信号进行什 么样的处理.例如一个进程可以忽略某些信号而只处理其他一些信号另外一个进程还可以选择如何处理信号.总之这些总与特定的进程相联 ...

  5. linux中sigaction函数详解

    一.函数原型:sigaction函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作) int sigaction(int signum, const struct sigaction * ...

  6. linux 中 sigaction 函数详解

    linux 中 sigaction 函数详解 一.函数原型 sigaction 函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作) int sigaction(int signum, ...

  7. ML之sklearn:sklearn.metrics中常用的函数参数(比如confusion_matrix等 )解释及其用法说明之详细攻略

    ML之sklearn:sklearn.metrics中常用的函数参数(比如confusion_matrix等 )解释及其用法说明之详细攻略 目录 sklearn.metrics中常用的函数参数 con ...

  8. Open_cv中常用函数的原型及参数解释(一)

    这里的函数主要总结自浅墨的系列博客,总结仅为了在使用时可以快速检索 具体Demo和教程请访问浅墨的Open_cv系列:访问地址 1.保存图像的数据结构:Mat Mat myMat= imread(&q ...

  9. python中的func函数_如何解释python func函数中的n?

    Func函数第一次了解知道是学习闭包章节中的,而后,因为函数本身存在的意义涵盖很多知识点,所以经常使用,在调用的时候,看到一个问题,就是关于python func函数中的n是什么?大家有没有考虑过呢? ...

最新文章

  1. 深入理解Java对象序列化
  2. 算法设计与分析 自创O(n)排序算法 适用于任何有理数
  3. oc 画一个圆弧_UG建模一个蜗杆的方法,纯手工建模无插件
  4. Mr.J--HTTP学习笔记(二)-- URL详解
  5. Nginx on Docker 配置
  6. Java学习笔记之:Java 继承
  7. RocketMQ集群详解
  8. zabbix 2.2 监控mysql_zabbix2.2入门教程之监控mysql(六)
  9. DQL——数据查询语言
  10. 不一样的Office 365之 —— 使用Delve查看热门文档
  11. 实习成长之路:MySQL十二:为什么我删除了表的不少数据,但是大小没变呢?
  12. PostgreSQL12.2_cn.chm 中文手册 最新版
  13. 微信小程序点击按钮弹出弹窗_微信小程序弹窗,微信小程序页面跳转、弹出框...
  14. TCP攻击实战及其简略防御措施
  15. 解析P2P金融的业务安全
  16. react 调用webIm
  17. JavaScript按住鼠标左键选中元素, 实现框选(Rubberband)效果
  18. 使用 setoolkit 伪造站点窃取用户信息
  19. Keras下载数据失败,本地导入
  20. 输入学生的学习成绩,学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

热门文章

  1. Postgresql逻辑复制DDL插件pgl_ddl_deploy
  2. 信号频率、采样频率、采样点数
  3. uniapp onReachBottom不触发
  4. 必学框架新版SpringBoot教程(下集)
  5. K-Means算法和DBSCAN算法
  6. CCF刷题合集(部分题解)
  7. 【电磁场计算】磁偶极子在外磁场中的受力
  8. 走近古人的生活 衣食住行
  9. 涉密计算机能用固态硬盘,质量不行数量来凑?RAID1能保护固态硬盘数据安全吗...
  10. PAC脚本语法(代理自动配置)