linux SIGFPE信号处理的疑惑

发现一个关于信号的问题: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
**********
 
 
为什么不是执行一次,而是执行很多次系统调用??


看手册发现这么一段话:
   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.

看样子是说SIGFPE信号对于进程的影响是不确定的。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值