将sigaction重置为默认值

时间:2014-07-17 12:18:27

标签: c linux signals bionic

在Android中,仿生加载器为statrtup上的每个进程设置一个默认信号处理程序:

void debugger_init()
{
    struct sigaction act;
    memset(&act, 0, sizeof(act));
    act.sa_sigaction = debugger_signal_handler;
    act.sa_flags = SA_RESTART | SA_SIGINFO;
    sigemptyset(&act.sa_mask);

    sigaction(SIGILL, &act, NULL);
    sigaction(SIGABRT, &act, NULL);
    sigaction(SIGBUS, &act, NULL);
    sigaction(SIGFPE, &act, NULL);
    sigaction(SIGSEGV, &act, NULL);
    sigaction(SIGSTKFLT, &act, NULL);
    sigaction(SIGPIPE, &act, NULL);
}

我想将其设置回默认值,这意味着我想忽略这些信号并且将发生默认处理程序(CORE DUMP)

如何恢复执行的操作?我想忽略所有这些,好像上面的函数从未被称为

2 个答案:

答案 0 :(得分:2)

阅读signal(7)sigaction(2),或许signal(2)

你可以打电话

signal(SIGILL, SIG_DFL);
signal(SIGABRT, SIG_DFL);

等早期main(在动态加载后输入)

您也可以sigaction设置为sa_handler

时使用SIG_DFL

当然,如果你想在main之前默认处理这些信号,那就更棘手了。在一些静态构造函数中!

答案 1 :(得分:0)

我发现当使用sigaction和signal设置为一个进程进行混合时,它可能会导致意外行为。