gpt4 book ai didi

c - SIGSEGV 发送两次 - 处理后程序崩溃

转载 作者:行者123 更新时间:2023-11-30 17:04:27 25 4
gpt4 key购买 nike

我有一个用于处理信号的 C 库的一部分的测试程序。这个测试程序中有很多代码 - 太多了,以至于我觉得将其发布在这里只会让回答我的问题变得更加困难。

基本上发生的事情是我强制系统在后台线程内向我发送 SIGSEGV。我处理该信号,然后测试就结束了。主线程将等待这一点,信号处理程序的一部分是重新启动主线程。当主线程重新启动时我通过 signal(SIGSEGV, SIG_DFL)恢复默认信号处理程序然后我收到另一个 SIGSEGV

我知道我有很多代码,这很可能是我的错,但是对于为什么 SIGSEGV 会触发两次是否有一个常见的解释?当我引起其他信号时,它不会发生(尽管我还没有尝试所有信号)。

澄清一下,我在 OS X 上,用 C 编写,用 gcc 编译。

最佳答案

如果信号处理程序内部出现任何问题,例如内存覆盖、尝试访问超出分配的区域,则会引发一个新信号。详情请参阅以下页面。

http://www.gnu.org/software/libc/manual/html_node/Signals-in-Handler.html

您还应该在信号处理程序中使用可重入函数,例如 localtime_r 而不是 localtime。

此外,建议使用sigaction()而不是signal()。

更多详细信息请参见:What is the difference between sigaction and signal?

关于c - SIGSEGV 发送两次 - 处理后程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35796861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com