c-如何在多线程环境中捕获SIGABRT



我想创建一个Units测试框架,但为了提供良好的报告,我需要捕获SIGABRT、SIGSEGV和可能的其他信号,以防止我的进程被杀死(因此,为了能够继续测试处理(。。。

但我不知道如何做到这一点,所以,我需要信息:

  • SIGABRT是线程直接信号吗
  • 如果我只使用主线程来捕获SIGABRT(或SIGSEGV(信号,会发生什么?调用abort的线程会从调用中返回吗(我希望不会(

如果你有任何有用的文档、链接或教程,我很感兴趣。这是一个使用pthreads的C代码。

感谢您的帮助

我需要捕获SIGABRT、SIGSEGV和可能的其他信号,以防止我的进程被杀死

这是徒劳的练习。在SIGABRTSIGSEGV被引发后,您(通常(对进程的状态一无所知——它可能已经损坏了堆、堆栈、测试框架内部的全局数据、C运行时系统内部的全局信息等。继续这样的进程极有可能在代码中的随机(正确(位置继续崩溃。

在测试框架中处理这一问题的唯一合理方法是fork,并让父进程处理子错误出口,报告它们并继续运行其他测试。

SIGABRT是线程直接信号吗?

没有";直接信号";。SIGABRT可以从外部发送到进程,也可以是进程内部的raised。

如果我只使用主线程来捕获SIGABRT(或SIGSEGV(信号,会发生什么?

SIGSEGVSIGABRT(当不是从外部发送时(被发送到导致无效内存操作(或raised it(的线程。

此外,不存在到";仅使用主线程"——sigaction在所有线程中都是全局的(尽管您可以设置特定于线程的信号掩码(。

相关内容

  • 没有找到相关文章

最新更新