SIGSEGV不会终止该过程

时间:2015-10-06 17:38:23

标签: c++ linux multithreading

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

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

所以我的问题是"异常终止&#34 ;?如果为SIG_DFL调用SIGSEGV,如何才能从内存中删除进程?可能会发生什么导致这种行为?我的Linux是Red Hat Enterprise Linux Server版本5.11(Tikanga)

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

1 个答案:

答案 0 :(得分:0)

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