Linux : Ignoting a signal inside a signal handler,忽略所有此类连续信号

Linux : Ignoring a signal inside a signal handler, ignoring all such successive signals

我有一个简单的程序来演示 Linux 在 C 中的信号处理。我只是为了实验而把它复杂化了..

void sigquit(int signo)
{
    printf("Recieved signo : %d\n",signo);
    signal(SIGQUIT,SIG_IGN);
}

int main()
{

    /* register the signal handler */
    if(signal(SIGQUIT,sigquit) == SIG_ERR)
    {
        perror("Error handling SIGQUIT signal");
        exit(1);
    }
    for(;;);
    return 0;
}

我得到输出:

^\Recieved signo : 3
^\^\^\^\^\^\^\

而我期待的是:

    ^\Recieved signo : 3
    ^\Recieved signo : 3
    ^\Recieved signo : 3
    ^\Recieved signo : 3

为什么只有第一次调用我的处理程序而不是进一步调用。我希望信号首先到达主线程,然后传递给处理程序。

signal(SIGQUIT,SIG_IGN);

从您的信号处理程序中,您告诉您的程序忽略任何进一步发生的信号情况。结果,当您再次发送信号时,它会被忽略,就像您告诉它的那样。