2016-03-04 1 views
1

ПРИМЕЧАНИЕ: SEGSEGV заблокирован, когда я поднял SIGSEGV как, raise(SIGSEGV);, но не по разыменованию указателя или нарушения памяти NULL. в чем проблема?является неоднозначным поведением для sigsegv

Код:

void sig_handler(int signo) 
{ 
     psignal(signo,"i am in sig_handler\n"); 
} 

int main() 
{ 
    sigset_t intmask; 
    int c = 0, *p = NULL; 

    if((signal(SIGSEGV , sig_handler)) == SIG_ERR) 
      perror("signal call is failed\n"); 
    if ((sigemptyset(&intmask) == -1) || (sigaddset(&intmask, SIGSEGV) == -1))  
      perror("Failed to initialize the signal mask"); 
    sigprocmask(SIG_BLOCK, &intmask, NULL); 
    fprintf(stdout, "SIGINT signal blocked\n"); 
    c = *p; 
} 

ответ

0

Страница руководства sigprocmask() есть ответ:

Если SIGBUS, SIGFPE, SIGILL или SIGSEGV генерируются в то время как они заблокированы, то результат не является неопределенным, если сигнал генерировался kill(2), sigqueue(3), или raise(3).