Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ SIGSEGV不会终止进程_C++_Linux_Multithreading - Fatal编程技术网

C++ SIGSEGV不会终止进程

C++ SIGSEGV不会终止进程,c++,linux,multithreading,C++,Linux,Multithreading,我有一个运行30多个线程的多线程应用程序。我知道有一个bug,有时两个线程试图同时对一个列表进行排序,这通常会导致其中一个线程访问无效内存。因此,将为该线程生成SIGSEGV 现在,根据我对信号的理解,线程应该为SIGSEGV调用SIG_DFL,这是进程的异常终止和coredump。但是,我看到进程仍然处于一种执行停止的不确定状态,但进程仍然处于活动状态。当我试图杀死它时,SIGTERM实际上被传播到我的自定义信号处理程序,该处理程序试图很好地关闭所有线程,但它挂断了,因为没有任何线程实际执行了

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

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

所以我的问题是什么是异常终止?如果为SIGSEGV调用SIG_DFL,如何不从内存中删除进程?究竟是什么原因导致了这种行为?我的Linux是Red Hat Enterprise Linux服务器版本5.11 Tikanga


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

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

你说你有一个定制的信号处理程序,它做什么呢?SIGTERM的预期行为是终止一个进程,但也可以捕获SIGTERM并做其他事情。SIGKILL是不可追踪的力量。i、 杀掉-9 12345还有,ps有没有把你的过程列为?如果是这样的话,它是一个僵尸进程,即它退出了,但它的返回值还没有被启动进程读取。您是否对其进行了pstack?这应该是要做的第一件事。@ADAM自定义处理程序通知其他线程释放它们可能持有的DB连接。下次我会试试“ps”。