在 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
的早期(动态加载后进入)
您还可以将 sigaction
与 sa_handler
设置为 SIG_DFL
当然,如果您想在 main
之前默认处理这些信号,事情会更加棘手,例如在一些静态构造函数中!
关于c - 将 sigaction 重置为默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24803368/