C Linux:忽略信号处理程序中的一个信号,忽略所有这样的连续信号
我有一个简单的程序来演示Linux下C语言的信号处理。我只是为了实验而把它复杂化了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) {
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;在处理器内部:-@如果你让它听起来像是编译器的千里眼。事实并非如此。您的程序一次执行一个命令。一旦注册了一个信号处理程序,并且在发出另一条指令之前,每当接收到一个信号时,就会调用该处理程序,并一次执行一个命令。您将代码放在处理程序中以停止该操作,系统实际上也停止了。