我想创建一个Units测试框架,但为了提供良好的报告,我需要捕获SIGABRT、SIGSEGV和可能的其他信号,以防止我的进程被杀死(因此,为了能够继续测试处理(。。。
但我不知道如何做到这一点,所以,我需要信息:
- SIGABRT是线程直接信号吗
- 如果我只使用主线程来捕获SIGABRT(或SIGSEGV(信号,会发生什么?调用abort的线程会从调用中返回吗(我希望不会(
如果你有任何有用的文档、链接或教程,我很感兴趣。这是一个使用pthreads的C代码。
感谢您的帮助
我需要捕获SIGABRT、SIGSEGV和可能的其他信号,以防止我的进程被杀死
这是徒劳的练习。在SIGABRT
或SIGSEGV
被引发后,您(通常(对进程的状态一无所知——它可能已经损坏了堆、堆栈、测试框架内部的全局数据、C运行时系统内部的全局信息等。继续这样的进程极有可能在代码中的随机(正确(位置继续崩溃。
在测试框架中处理这一问题的唯一合理方法是fork
,并让父进程处理子错误出口,报告它们并继续运行其他测试。
SIGABRT是线程直接信号吗?
没有";直接信号";。SIGABRT
可以从外部发送到进程,也可以是进程内部的raise
d。
如果我只使用主线程来捕获SIGABRT(或SIGSEGV(信号,会发生什么?
SIGSEGV
和SIGABRT
(当不是从外部发送时(被发送到导致无效内存操作(或raise
d it(的线程。
此外,不存在到";仅使用主线程"——sigaction
在所有线程中都是全局的(尽管您可以设置特定于线程的信号掩码(。