linux信号

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)退出

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值