发现一个关于信号的问题:SIGFPE是浮点运算异常,我写了这么一段程序:
void sig_deal(int signo)
{
printf("deal %d\n", signo);
}
int main(int argc, char * argv[])
{
signal(SIGFPE, sig_deal);
printf("%d",1/0);
exit(1);
}
sig_deal函数是不是应该只被调用一次,可我的运行结果却是:
deal 8
deal 8
deal 8
deal 8
deal 8
deal 8
deal 8
deal 8
deal 8
deal 8
deal 8
deal 8
**********
void sig_deal(int signo)
{
printf("deal %d\n", signo);
}
int main(int argc, char * argv[])
{
signal(SIGFPE, sig_deal);
printf("%d",1/0);
exit(1);
}
sig_deal函数是不是应该只被调用一次,可我的运行结果却是:
deal 8
deal 8
deal 8
deal 8
deal 8
deal 8
deal 8
deal 8
deal 8
deal 8
deal 8
deal 8
**********
为什么不是执行一次,而是执行很多次系统调用??
看手册发现这么一段话:
According to POSIX, the behavior of a process is undefined after it ignores a SIGFPE, SIGILL, or SIGSEGV
signal that was not generated by kill(2) or raise(3). Integer division by zero has undefined result.
On some architectures it will generate a SIGFPE signal. (Also dividing the most negative integer by -1
may generate SIGFPE.) Ignoring this signal might lead to an endless loop.
signal that was not generated by kill(2) or raise(3). Integer division by zero has undefined result.
On some architectures it will generate a SIGFPE signal. (Also dividing the most negative integer by -1
may generate SIGFPE.) Ignoring this signal might lead to an endless loop.
看样子是说SIGFPE信号对于进程的影响是不确定的。