void DdsProBus::SignalHandler(int sig)
{
switch (sig)
{
case SIGABRT:
case SIGFPE:
case SIGILL:
case SIGQUIT:
case SIGSEGV:
signal(sig, SIG_DFL);
raise(sig);
break;
case SIGALRM:
case SIGHUP:
case SIGINT:
case SIGKILL:
case SIGPIPE:
case SIGTERM:
g_dds_pro_is_running = false;
std::cout << "g_dds_pro_is_running is false" << std::endl;
break;
default:
return;
}
}
static void signalSegHandler(int sig)
{
LOG(WARNING) << "signal:" << sig;
holo::log::HoloLogger::Shutdown();
}
static void signalSegHandler_coredump(int sig)
{
signalSegHandler(sig);
cmw_wrapper::BusType::SignalHandler(sig);
}
static void signalSegHandler_without_coredump(int sig)
{
signalSegHandler(sig);
exit(0);
}
int main(int argc, char** argv)
{
signal(SIGSEGV, signalSegHandler_coredump);
signal(SIGINT, signalSegHandler_without_coredump);
signal(SIGTERM, signalSegHandler_without_coredump);
return 0;
}
当linux打开coredump后,signal(sig, SIG_DFL)默认会去生成coredump;如果想在某些信号下不生成coredump,则不能执行signal(sig, SIG_DFL),并且需要exit(0)退出