raise(sig)
的实现似乎会重置使用signal(sig, handlerFunction)
安装的处理程序,也就是说,在多线程程序中,第一个调用abort()
的线程将调用自定义handlerFunction
,但如果任何其他线程调用abort,则另一个线程将只调用exit(3)
。
答案 0 :(得分:0)
显然,signal + raise的行为是这样指定的。来自维基百科关于sigaction
的文章:
...替换不可靠且已弃用的
signal()
函数。信号 将卸载signal()
接口安装的处理程序 在执行处理程序之前。永久处理者必须 因此,在处理程序期间通过调用signal()
重新安装 执行,导致......
所以这似乎是预期的行为。 (当然,MSDN文档似乎完全没有提到这一点。)
关于SO的问题:What is the difference between sigaction and signal?