sigaction函数
sigaction函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作)。
他是POSIX的信号接口,而signal()是标准C的信号接口(如果程序必须在非POSIX系统上运行,那么就应该使用这个接口)
给信号signum设置新的信号处理函数act, 同时保留该信号原有的信号处理函数oldact
|
结构sigaction定义如下:
|
sa_handler字段包含一个信号捕捉函数的地址
sa_mask字段说明了一个信号集,在调用该信号捕捉函数之前,这一信号集要加进进程的信号屏蔽字中。仅当从信号捕捉函数返回时再将进程的信号屏蔽字复位为原先值。
sa_flag是一个选项,主要理解两个
|
最后一个参数是一个替代的信号处理程序,当设置SA_SIGINFO时才会用他。
例子:
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
void show_handler(int sig)
{
printf("I got signal %d\n", sig);
int i;
for(i = 0; i < 5; i++) {
printf("i = %d\n", i);
sleep(1);
}
}
int main(void)
{
int i = 0;
struct sigaction act, oldact;
act.sa_handler = show_handler;
sigaddset(&act.sa_mask, SIGQUIT); //见注(1)
act.sa_flags = SA_RESETHAND | SA_NODEFER; //见注(2)
//act.sa_flags = 0; //见注(3)
sigaction(SIGINT, &act, &oldact);
while(1) {
sleep(1);
printf("sleeping %d\n", i);
i++;
}
}
注:
(1) 如果在信号SIGINT(Ctrl + c)的信号处理函数show_handler执行过程中,本进程收到信号SIGQUIT(Crt+\),将阻塞该信号,直到show_handler执行结束才会处理信号SIGQUIT。
(2) SA_NODEFER 一般情况下, 当信号处理函数运行时,内核将阻塞<该给定信号 -- SIGINT>。但是如果设置了SA_NODEFER标记, 那么在该信号处理函数运行时,内核将不会阻塞该信号。 SA_NODEFER是这个标记的正式的POSIX名字(还有一个名字SA_NOMASK,为了软件的可移植性,一般不用这个名字)
SA_RESETHAND 当调用信号处理函数时,将信号的处理函数重置为缺省值。 SA_RESETHAND是这个标记的正式的POSIX名字(还有一个名字SA_ONESHOT,为了软件的可移植性,一般不用这个名字)
(3) 如果不需要重置该给定信号的处理函数为缺省值;并且不需要阻塞该给定信号(无须设置sa_flags标志),那么必须将sa_flags清零,否则运行将会产生段错误。但是sa_flags清零后可能会造成信号丢失!
sigaction函数相关推荐
- sigaction 函数,sigemptyset()函数,fcntl()函数,isatty()函数
第一个函数:使用 sigaction函数: signal 函数的使用方法简单,但并不属于POSIX标准,在各类UNIX平台上的实现不尽相同,因此其用途受 到了一定的限制.而 POSIX标准定义的信号处 ...
- sigaction函数解析
sigaction函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作). 他是POSIX的信号接口,而signal()是标准C的信号接口(如果程序必须在非POSIX系统上运行,那么就应该 ...
- UNIX环境编程学习笔记(25)——信号处理进阶学习之 sigaction 函数
lienhua34 2014-11-05 sigaction 函数跟 signal 函数一样,用于设置信号处理函数.此函数是用于取代 UNIX 早期版本使用的 signal 函数.UNIX 早期版本的 ...
- sigaction函数使用实例
sigaction函数 (1)sigaction函数原型 sigaction函数用来查询和设置信号处理方式,它是用来替换早期的signal函数.sigaction函数原型及说明如下: sigactio ...
- Linux 进程学习(四)------ sigaction 函数
转自:http://www.cnblogs.com/wblyuyang/archive/2012/11/13/2768923.html 使用 sigaction 函数: signal 函数的使用方法 ...
- 信号的捕捉与sigaction函数
一.内核如何实现信号的捕捉 如果信号的处理动作是用户自定义函数,在信号递达时就调用这个函数,这称为捕捉信号.由于信号处理函数的代码是在用户空间的,处理过程比较复杂,举例如下: 1. 用户程序注册了SI ...
- 信号、signal 函数、sigaction 函数
文章目录 1.信号的基本概念 2.利用 kill 命令发送信号 3.信号处理的相关动作 4.信号与 signal 函数 4.1 signal 函数示例一 4.2 signal 函数示例二 5.利用 s ...
- 信号的用法,signal函数、sigaction函数及信号集(sigemptyset,sigaddset)操作函数
信号是与一定的进程相联系的.也就是说,一个进程可以决定在进程中对哪些信号进行什 么样的处理.例如,一个进程可以忽略某些信号而只处理其他一些信号:另外,一个进程还可以选择如何处理信号.总之,这些总与特定 ...
- sigaction函数中关于sa_mask的解释
使用 man sigaction 查看手册,对sa_mask的描述是这样的: sa_mask specifies a mask of signals which should be bloc ...
- linux sigaction函数 sa_flags的值
开始对sa_flags有疑问,网上搜到都是这一个程序,就复制来说事: 代码: 1 #include <stdio.h> 2 #include <stdlib.h> 3 ...
最新文章
- 迪士尼公布最新研究:AR对象可智能地与环境中的物体交互
- matlab中fill函数的使用方法
- 学生信息管理系统c语言课设,学生信息管理系统C语言课设.doc
- 计算机网络设备配置遇到的问题,网络设备使用与维护
- python的urllib2包基本使用方法
- 【NOI OpenJudge】【1.4】编程基础之逻辑表达式与条件分支
- php 中文名称排序 源码,四种排序算法PHP实现类
- Ubuntu 18.04 8T硬盘挂载
- 洛谷 P1560 [USACO5.2]蜗牛的旅行Snail Trails(不明原因的scanf错误)
- [2020 年百度之星·程序设计大赛 - 复赛] Battle for Wosneth
- 浙大计算机考研分数线2016,浙江大学2016考研复试分数线
- Windows下利用Python自动切换IP/DNS
- 见微知著:语义分割中的弱监督学习
- CuraEngine引擎命令行调用方法
- java中的char_java中的char是什么意思?
- 2022年Github学生包白嫖!
- Tableau权限设置
- 机器学习典型隐私威胁
- 随机生成双色球号码判断中奖模拟开奖python代码
- 如何提高系统的稳定性?
热门文章
- 学生成绩表c语言,学生成绩管理系统C语言(附完整源代码) .doc
- ShineScrum10月27日高端敏捷沙龙火热报名
- 计算机错误1053,系统之家win7电脑宽带连接失败提示错误1053怎么办
- 以报复为由,新版本Conti勒索软件源代码遭泄露,6万余条内部消息公之于众
- 云栖小镇通勤车_云栖大会来啦!云栖小镇怎么走 杭州交警告诉你
- lightdb22.3预览-listagg 增强
- 雅可比法实验报告matlab,数学建模实验报告范文 数学建模的实验报告
- 【z3 solver手动安装】
- 普通心理学-学习笔记
- DCL(双锁检测)单例模式