我有一个运行30个线程的多线程应用程序。我知道有一个错误,有时两个线程同时尝试对一个列表进行排序,这通常会导致其中一个线程访问无效内存。因此,为该线程生成SIGSEGV
。
现在,根据我对信号的理解,线程应该为SIG_DFL
调用SIGSEGV
,这是进程的异常终止和coredump。但是,我看到进程仍处于活动状态(处于一种不稳定状态),执行暂停,但进程仍然存在。当我尝试kill
时,SIGTERM
实际上传播到我的自定义信号处理程序(它试图很好地关闭所有线程),但是它挂断了,因为没有任何线程实际上执行了。我终于使用SIGQUIT
设法杀了它,之后生成了核心文件。
所以我的问题是"异常终止&#34 ;?如果为SIG_DFL
调用SIGSEGV
,如何才能从内存中删除进程?可能会发生什么导致这种行为?我的Linux是Red Hat Enterprise Linux Server版本5.11(Tikanga)
答案 0 :(得分:0)
情况并不像我想象的那么简单。最初的问题是两个线程之间的死锁。当我发出SIGTERM时,实际上我的自定义信号处理程序在(现在没有)死锁线程中引起了段错误。