码迷,mamicode.com
首页 > 其他好文 > 详细

信号(三)---早期signal函数和现代signal函数的一些对比

时间:2016-10-03 23:22:22      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

使用signal函数的一些缺点:
  • 由于signal函数调用成功时会返回原来信号处理程序的指针,所以如果我想要利用signal函数来获取原先信号处理程序的指针的话,必须要先去改变其信号处理方式。如下图所示

技术分享

技术分享
  • 在早期的signal函数的实现中,使用signal函数安装的信号处理函数只能使用一次;在第一次捕捉到该信号的时候,就去执行安装的信号处理函数,同时内核会将该信号的信号处理方式修改为默认方式。下次进程再次收到这个信号的时候,进程将会执行信号的默认动作。但是现在的signal函数的实现并不是这样的,只要使用signal函数安装一次信号处理函数就可以永久使用该信号处理函数。究其根本原因,在于signal函数最终调用了sigaction函数,并且传递的参数中含有SA_ONESHOT这个标志,而早期的signal函数调用的sigaction中,并没有传递SA_ONSHOT这个标志。在现在的操作系统中,使用sysv_signal函数来代表早期的signal函数。
  • 早期的signal函数实现在执行某信号的信号处理函数的时候并不会屏蔽该信号,执行信号处理函数的期间如果再次收到了该信号,进程将立即执行信号的默认动作(由于早期signal函数实现只能使用信号处理函数一次)。但是现代的signal函数实现中都会阻塞该信号,会等到本次信号处理函数执行完毕后再去处理收到的信号。
  • 早期的signal函数会中断某些系统调用,现代的signal函数不会出现这个问题,具体的后面的文章再细分析。

信号(三)---早期signal函数和现代signal函数的一些对比

标签:

原文地址:http://www.cnblogs.com/frank-yxs/p/5926135.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!