C 对sigsegv来说是一种模棱两可的行为

C 对sigsegv来说是一种模棱两可的行为,c,linux,segmentation-fault,signals,ipc,C,Linux,Segmentation Fault,Signals,Ipc,注意:当我像,raise(SIGSEGV)一样引发SIGSEGV时,SEGV被阻止但不是在取消引用NULL指针或内存冲突时。这里的问题是什么 代码: 的手册页有以下答案: 如果在阻塞期间生成SIGBUS、SIGFPE、SIGILL或SIGSEGV,则结果未定义,除非信号是由kill(2)、sigqueue(3)或raise(3)生成的 的手册页有以下答案: 如果在阻塞期间生成SIGBUS、SIGFPE、SIGILL或SIGSEGV,则结果未定义,除非信号是由kill(2)、sigqueue(3)

注意:当我像,
raise(SIGSEGV)一样引发SIGSEGV时,SEGV被阻止但不是在取消引用
NULL
指针或内存冲突时。这里的问题是什么

代码:

的手册页有以下答案:

如果在阻塞期间生成SIGBUS、SIGFPE、SIGILL或SIGSEGV,则结果未定义,除非信号是由
kill(2)
sigqueue(3)
raise(3)
生成的

的手册页有以下答案:

如果在阻塞期间生成SIGBUS、SIGFPE、SIGILL或SIGSEGV,则结果未定义,除非信号是由
kill(2)
sigqueue(3)
raise(3)
生成的

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;
}