unix环境高级编程(阅读笔记)------signal函数与sigaction的区别
来源:互联网 发布:php读取中文文件名 编辑:程序博客网 时间:2024/06/10 14:27
signal函数每次设置具体的信号处理函数(非SIG_IGN)只能生效一次,每次在进程响应处理信号时,随即将信号处理函数恢复为默认处理方式.所以如果想多次相同方式处理某个信号,通常的做法是,在响应函数开始,再次调用signal设置,如下图:
int sig_int(); //My signal handler
...
signal(SIGINT, sig_int);
...
int sig_int()
{
signal(SIGINT, sig_int);
....
}
这种代码段的一个问题是:在信号发生之后到信号处理程序中调用s i g n a l函数之间有一个
时间窗口。在此段时间中,可能发生另一次中断信号。第二个信号会造成执行默认动作,而对
中断信号则是终止该进程。这种类型的程序段在大多数情况下会正常工作,使得我们认为它们
正确,而实际上却并不是如此。
另一个问题是:在进程不希望某种信号发生时,它不能关闭该信号。
sigaction:
1.在信号处理程序被调用时,系统建立的新信号屏蔽字会自动包括正被递送的信号。因此保证了在处理一个给定的信号时,如果这种信号再次发生,那么它会被阻塞到对前一个信号的处理结束为止
2.响应函数设置后就一直有效,不会重置
3.对除S I G A L R M以外的所有信号都企图设置S A _ R E S TA RT标志,于是被这些信号中断的系统调用(read,write)都能自动再起动。不希望再起动由S I G A L R M信号中断的系统调用的原因是希望对I / O操作可以设置时间限制。
所以希望能用相同方式处理信号的多次出现,最好用sigaction.信号只出现并处理一次,可以用signal。
signal具体执行几次,会根据平台的不同而发生改变。
- unix环境高级编程(阅读笔记)------signal函数与sigaction的区别
- Unix环境高级编程(阅读笔记)----sigaction函数
- 《UNIX环境高级编程》笔记--sigaction函数
- unix环境高级编程(阅读笔记)-----信号以及signal函数
- Unix环境高级编程(阅读笔记)----sigsuspend函数
- 《UNIX环境高级编程》笔记--信号及其处理函数signal
- Unix环境高级编程(阅读笔记)----中断的系统调用,自动重启动的函数
- 《unix环境高级编程》信号——sigaction 函数
- 《unix环境高级编程》信号——sigaction 函数
- UNIX环境高级编程(阅读笔记)---线程相关函数
- Unix环境高级编程(阅读笔记)----信号集、信号屏蔽函数sigprocmask
- Unix环境高级编程(阅读笔记)-----kill、raise、alarm、pause函数
- Unix环境高级编程(阅读笔记)----setjmp和longjmp函数使用详解
- Unix环境高级编程阅读笔记(1)
- Unix环境高级编程(阅读笔记)----可靠信号
- 《unix环境高级编程》中信号signal函数
- UNIX环境编程学习笔记(25)——信号处理进阶学习之 sigaction 函数
- 《unix环境高级编程》第八章 关于几个函数的区别(wait()与 waitpid())
- MVP模式在Android项目中的使用
- poj3667 Hotel(成段更新+区间合并)
- zabbix3.0.2 客户端zabbix_agentd 启动报错问题处理记录
- 判断是否为平衡二叉树
- c++第五次作业
- unix环境高级编程(阅读笔记)------signal函数与sigaction的区别
- Qt:使用C++还是QML
- GBK与UTF-8的区别
- 【CodeForces】[66A]Petya and Java
- APP开发实战9-API接口安全方案
- Apache Flink:特性、概念、组件栈、架构及原理分析
- hdu——2084数塔
- 创建 jsp 时,网页出现莫名错误
- Maven简单了解