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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了信号---早期signal函数和现代signal函数的一些对比相关的知识,希望对你有一定的参考价值。

使用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函数的一些对比的主要内容,如果未能解决你的问题,请参考以下文章

使用sigaction来取代signal作为信号处理器函数

signal的函数名: signal

关于信号处理函数的参数问题!signal ???

linux之信号处理函数signal和sigaction

signal函数原型一些不理解的地方

Linux 进程间通信系列之 信号