c - 将 sigaction 重置为默认值

标签 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);
}

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

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

最佳答案

阅读signal(7) , sigaction(2)也许signal(2) .

你可以打电话

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

等等,在您的main的早期(动态加载后进入)

您还可以将 sigactionsa_handler 设置为 SIG_DFL

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

关于c - 将 sigaction 重置为默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24803368/

相关文章:

C - 是否有必要检查 freopen 的返回值?

c - 如何读取文本文件

linux - 有什么有效的方法可以轻松获取Unix下Go程序的panic log吗?

c++ - 为什么 C 在代码执行方面比 C++ 快?

字符比较始终为 false c

linux - Shell脚本执行失败

arrays - 使用 set -u 从 bash 中的关联数组中获取元素

c - 使用 sigaction 学习 POSIX 信号

signals - C SIGSEGV 处理程序和 Mprotect

c++ - Gtkmm : How to update UI from another thread? 连续