我有一个简单的程序来演示 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);
从信号处理程序中,您告诉程序忽略该信号发生的任何进一步情况。因此,当您再次发送信号时,它会被忽略,就像您告诉它的那样。
关于c - Linux : Ignoring a signal inside a signal handler, 忽略所有此类连续信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37510219/