(为什么)提高复位信号处理程序?

时间:2013-08-02 11:11:23

标签: visual-c++ signals abort msvcrt

raise(sig)的实现似乎会重置使用signal(sig, handlerFunction)安装的处理程序,也就是说,在多线程程序中,第一个调用abort() 的线程将调用自定义handlerFunction,但如果任何其他线程调用abort,则另一个线程将只调用exit(3)

1 个答案:

答案 0 :(得分:0)

显然,signal + raise的行为是这样指定的。来自维基百科关于sigaction的文章:

  

...替换不可靠且已弃用的signal()函数。信号   将卸载signal()接口安装的处理程序   在执行处理程序之前。永久处理者必须   因此,在处理程序期间通过调用signal()重新安装   执行,导致......

所以这似乎是预期的行为。 (当然,MSDN文档似乎完全没有提到这一点。)

关于SO的问题:What is the difference between sigaction and signal?