gpt4 book ai didi

c++ - SIGSEGV 不终止进程

转载 作者:太空宇宙 更新时间:2023-11-04 13:04:48 25 4
gpt4 key购买 nike

我有一个运行 30 多个线程的多线程应用程序。我知道有一个错误,有时两个线程试图同时对一个列表进行排序,这通常会导致其中一个线程访问无效内存。因此,为该线程生成一个 SIGSEGV

现在,根据我对信号的理解,线程应该为SIGSEGV调用SIG_DFL,这是进程异常终止和coredump。但是,我看到进程仍然存在(处于一种边缘状态),执行停止,但进程仍然存在。当我试图kill 它时,SIGTERM 实际上传播到我的自定义信号处理程序(它试图很好地关闭所有线程),但它挂断了,因为没有线程实际上在执行了。我终于设法使用 SIGQUIT 杀死了它,然后生成了核心文件。

所以我的问题是“异常终止”是什么意思?如果为 SIGSEGV 调用了 SIG_DFL,进程如何不从内存中删除?可能发生了什么导致了这种行为?我的 Linux 是 Red Hat Enterprise Linux Server 5.11 (Tikanga)

编辑:我(或多或少)知道如何调试它,我什至知道错误是什么。我的问题或多或少是:当用 SIGSEGV 调用 SIG_DFL 时,RedHat 到底做了什么?这里的问题是进程没有响应,但也没有死——因此自动重启程序没有启动,我们有一些不愉快的停机时间。

最佳答案

情况并不像我想象的那么简单。最初的问题是两个线程之间的死锁。当我发出 SIGTERM 时,实际上我的自定义信号处理程序在(现在解除)死锁线程中导致了段错误。

关于c++ - SIGSEGV 不终止进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32976165/

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