C++ 即使在处理SIGSEGV信号后也生成核心文件

C++ 即使在处理SIGSEGV信号后也生成核心文件,c++,c,gdb,signals,core-file,C++,C,Gdb,Signals,Core File,场景: 我有一个进程正在我的板上运行。有时进程由于分段错误而崩溃。所以,当分段故障发生时,我需要闪烁一个LED。LED代码也是过程的一部分 但是,当分割错误发生时,进程崩溃,而板的最终用户不知道进程崩溃 期望值 我要处理SIGSEGV信号。当SIGSEGV提升时,将调用处理程序,从处理程序中,我需要调用gracefullyDownFunction()。函数将闪烁该指示灯 我面临的问题是,核心文件没有生成 因此,我的期望是核心文件也需要生成,以及gracefullyDownFunction()也被

场景: 我有一个进程正在我的板上运行。有时进程由于分段错误而崩溃。所以,当分段故障发生时,我需要闪烁一个LED。LED代码也是过程的一部分

但是,当分割错误发生时,进程崩溃,而板的最终用户不知道进程崩溃

期望值 我要处理SIGSEGV信号。当SIGSEGV提升时,将调用处理程序,从处理程序中,我需要调用gracefullyDownFunction()。函数将闪烁该指示灯

我面临的问题是,核心文件没有生成

因此,我的期望是核心文件也需要生成,以及gracefullyDownFunction()也被调用

我正在寻找这个要求的解决方案


提前感谢。

您可能要么删除处理程序并在信号处理程序中重新提升信号,要么干脆
kill(getpid(),SIGABRT)
。但在这种情况下,我不会调用函数gracefullyDownFunction()。我想您应该换一种方式。在
fork()
中由父进程运行应用程序,当应用程序崩溃时,父进程将知道并用led发出信号。家长也可以以有意义的方式处理崩溃(例如重新启动应用程序)。当您对应用程序充满信心时,只需扔掉父启动器,您的应用程序就可以发布了。@PankajChoudhary,您可以在调用
gracefullyDownFunction()
后删除处理程序并在信号处理程序中重新引发信号。核心转储将有一些不相关的信息,但应该仍然可用。谢谢。这种做法是正确的。我们需要添加一个主进程和frok(),该进程将构成我的应用程序。主进程将调用wait4(),当应用程序崩溃时,它将通过led闪烁优雅地关闭系统。