sigaction()函数。它的原型为:

#include <signal.h>int sigaction(int sig, const struct sigaction *act, struct sigaction *oldact);

sigaction结构体:

struct sigaction {void     (*sa_handler)(int);
void     (*sa_sigaction)(int, siginfo_t *, void *);
sigset_t   sa_mask;
int        sa_flags;
void     (*sa_restorer)(void);
};

sa_sigaction:如果设置了SA_SIGINFO标志位,则会使用sa_sigaction处理函数,否则使用sa_handler处理函数。
sa_mask:定义一组信号,在调用由sa_handler所定义的处理器程序时将阻塞该组信号,不允许它们中断此处理器程序的执行。
sa_flags:位掩码,指定用于控制信号处理过程的各种选项。
SA_NODEFER:捕获该信号时,不会在执行处理器程序时将该信号自动添加到进程掩码中。
SA_ONSTACK:针对此信号调用处理器函数时,使用了由sigaltstack()安装的备选栈。
SA_RESETHAND:当捕获该信号时,会在调用处理器函数之前将信号处置重置为默认值(即SIG_IGN)。
SA_SIGINFO:调用信号处理器程序时携带了额外参数,其中提供了关于信号的深入信息
SA_RESTART:执行信号处理后自动重启动先前中断的系统调用

sigaction()的功能是为信号指定相关的处理程序,但是它在执行信号处理程序时,会把当前信号加入到进程的信号屏蔽字中,从而防止在进行信号处理期间信号丢失。

sa_flags用于指定信号处理动的选项标志,详见手册。这里我想说的是SA_RESTART和SA_SIGINFO。SA_RESTART用于控制信号的自动重启动机制,如前面例子所示,对signal(),Linux默认会自动重启动被中断的系统调用;而对于 sigaction(),Linux默认并不会自动重启动,所以如果希望执行信号处理后自动重启动先前中断的系统调用,就需要为sa_flags指定 SA_RESTART标志

程序:

如果改为act.sa_flags = (SA_SIGINFO|SA_RESETHAND),信号处理一次就会退出;

#define SIGETX 44void signalHandle(int signum) {if(signum  = SIGETX) {printf("SIGETX recived");}
}int main(void)struct sigaction act;sigemptyset(&act.sa_mask);//这里使用SA_RESTART执行信号处理后自动重启到先前中断的系统调用,可以多次捕捉信号act.sa_flags = (SA_SIGINFO|SA_RESTART);act.sa_sigaction = signalHandle;sigaction(SIGETX, &act, NULL);while(1){pause();
}

sigaction详细解析相关推荐

  1. OpenCL编程详细解析与实例

    OpenCL编程详细解析与实例 C语言与OpenCL的编程示例比较 参考链接: https://www.zhihu.com/people/wujianming_110117/posts 先以图像旋转的 ...

  2. 深度学习目标检测详细解析以及Mask R-CNN示例

    深度学习目标检测详细解析以及Mask R-CNN示例 本文详细介绍了R-CNN走到端到端模型的Faster R-CNN的进化流程,以及典型的示例算法Mask R-CNN模型.算法如何变得更快,更强! ...

  3. celery的使用(最新详细解析)

    celery的使用(最新详细解析) 一. Celery简介 Celery是一个简单.灵活且可靠的,处理大量消息的分布式系统,专注于实时处理的异步任务队列,同时也支持任务调度. Celery的架构由三部 ...

  4. 汇编语言 第3版 王爽 检测点习题部分—答案及详细解析

    第一章 基础知识 检测点1.1 (1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为()位. (2)1KB的存储器有() 个存储单元,存储单元的编号从()到() . (3)1KB的存储器可以存 ...

  5. Eclipse快捷键详细解析

    android开发中常用的Eclipse快捷键详细解析 1.查看快捷键定义的地方 Window->Preferences->General->Keys. 2.更改启动页 在Andro ...

  6. AlphaCode到底强在哪儿?清华博士后十分钟视频详细解析

    来源:机器之心 本文约2300字,建议阅读5分钟 AlphaCode 到底是怎么练成的? 春节期间,DeepMind 的编程版 AlphaGo--AlphaCode 一度火到刷屏.它可以编写与普通程序 ...

  7. mysql grant all详解_MySQL grant 语法的详细解析

    以下的文章是MySQL grant语法的详细解析,如果你对MySQL grant 语法的相关的实际操作有兴趣的话,你就可以对以下的文章点击观看了.我们大家都知道MySQL数据库赋予用户权限命令的简单格 ...

  8. 线程同步锁 java_java多线程同步之重入锁,详细解析

    上次已经为大家介绍过java多线程同步,Volatile详解的主要内容了.今天再来为大家介绍一些相关的内容,也就是java多线程同步之重入锁,一起来了解一下吧. 使用重入锁实现线程同步 在JavaSE ...

  9. 终端不能联网_详细解析物联网是什么?

    原标题:详细解析物联网是什么? 物联网的英文是Internet of Things,缩写为IoT.这里的"物"指的是我身边一切能与网络联通的物品.例如你带的手表.你骑的共享单车.马 ...

最新文章

  1. java 判断pc还是手机_java-判断是移动端还是PC端访问
  2. python画动态图代码-Python使用matplotlib画动态图
  3. 【译】node js event loop part 1.1
  4. PHP-代码审计-命令执行
  5. Code Quality
  6. Warning: Unknown: The session id is too long
  7. 多项式牛顿迭代(应用:求逆,开根,对数exp)
  8. java线程池参数面试题,附赠复习资料
  9. 获取占用fd最大的前20个进程
  10. 2012年回忆录及2013年目标设立
  11. android 接百度SDK遇到的坑(百度地图BD09经纬度转高德地图GCJ02经纬度)
  12. 计算机在材料科学中的应用论文,计算机在材料科学中的应用论文.pdf
  13. java map格式化_字符串模板格式化输出map 值
  14. 斗鱼TV Web API
  15. 韦东山第3期嵌入式Linux项目-视频监控-3-在LCD上显示摄像头图像
  16. CMMB蓄势待发,模拟电视东山再起
  17. Excel表VLOOKUP多个条件匹配数据
  18. vue入门到启动_Vue入门:Vue项目创建及启动
  19. idea项目配置jsp模板
  20. curl证书过期_定时检测SSL证书过期情况并发送通知

热门文章

  1. 3D人脸模型Flame ----《Learning a model of facial shape and expression from 4D scans》论文讲解及代码注释
  2. linux下dlsym返回的函数地址的具体含义
  3. 成都前端培训哪家比较好
  4. python 线性插值处理_Python中的线性插值
  5. 路由器工作模式 history和hash 以及重定向问题
  6. 原作者彤砸(诶嘿嘿《聊聊我的故事 | 带一只柚子上路》【转载】
  7. 十二、忘记root密码
  8. 利用多线程模仿手机闹钟,
  9. 某集团汽车配件电子图册性能分析案例(二)
  10. 用友U8车间管理案例专题二