【问题标题】:reset sigaction to default将 sigaction 重置为默认值
【发布时间】:2014-07-17 12:18:27
【问题描述】:

在 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)

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

【问题讨论】:

    标签: c linux signals bionic


    【解决方案1】:

    阅读signal(7)sigaction(2),也许还有signal(2)

    你可以打电话

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

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

    您也可以使用 sigaction 并将 sa_handler 设置为 SIG_DFL

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-30
        • 2011-04-06
        • 2012-10-31
        • 2023-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-22
        相关资源
        最近更新 更多