2014-07-17 11 views
2

В Android бионический загрузчик устанавливает обработчик сигнал по умолчанию для каждого процесса на statrtup:сброс sigaction по умолчанию

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)

Как вернуть действие? Я хочу игнорировать все это, как если бы вышеупомянутая функция никогда не называлась

ответ

1

Прочитано signal(7), sigaction(2) и, возможно, signal(2).

Вы могли бы назвать

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

и так далее в начале вашего main (который вводится после динамического нагружения)

Вы также можете использовать sigaction с sa_handler набором для SIG_DFL

Конечно , все сложнее, если вы хотите по умолчанию обрабатывать эти сигналы до вашего main, например в некотором статическом конструкторе!