Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Linux:忽略信号处理程序中的一个信号,忽略所有这样的连续信号_C_Linux_Signal Handling - Fatal编程技术网

C Linux:忽略信号处理程序中的一个信号,忽略所有这样的连续信号

C Linux:忽略信号处理程序中的一个信号,忽略所有这样的连续信号,c,linux,signal-handling,C,Linux,Signal Handling,我有一个简单的程序来演示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) {

我有一个简单的程序来演示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
为什么只是第一次调用我的处理程序,而不是进一步调用。我希望信号首先到达主线程,然后传递给处理程序

信号退出,信号退出


从信号处理程序中,您告诉程序忽略信号发生的任何其他情况。因此,当您再次发送信号时,它会被忽略,就像您告诉它的那样。

那么,这条线背后的想法是什么呢;虽然-这种混乱可能是由于我的理解。到目前为止,我的观点是,当程序以main启动时,它会看到我希望将sigint注册为处理程序。所以,不确定编译器还是在运行时注册sigint以便在每次信号出现时调用。sigint内部的内容与此无关。这可能会有帮助。我正在更深入地探索它,以使工作更清晰。sigint中的内容与此无关。为什么-S@InsaneCoder尝试将int i=0;i/=i;在处理器内部:-@如果你让它听起来像是编译器的千里眼。事实并非如此。您的程序一次执行一个命令。一旦注册了一个信号处理程序,并且在发出另一条指令之前,每当接收到一个信号时,就会调用该处理程序,并一次执行一个命令。您将代码放在处理程序中以停止该操作,系统实际上也停止了。