免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1336 | 回复: 6
打印 上一主题 下一主题

[Linux] linux signal 信号处理方式的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-02-21 20:51 |只看该作者 |倒序浏览
请教大家一个关于信号的问题哈: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
**********


为什么不是执行一次,而是执行很多次系统调用??
求指教

论坛徽章:
16
CU十二周年纪念徽章
日期:2013-10-24 15:41:3415-16赛季CBA联赛之广东
日期:2015-12-23 21:21:55青铜圣斗士
日期:2015-12-05 10:35:30黄金圣斗士
日期:2015-11-26 20:42:16神斗士
日期:2015-11-19 12:47:50每日论坛发贴之星
日期:2015-11-18 06:20:00程序设计版块每日发帖之星
日期:2015-11-18 06:20:002015亚冠之城南
日期:2015-11-10 19:10:492015亚冠之萨济拖拉机
日期:2015-10-28 18:47:282015亚冠之柏太阳神
日期:2015-08-30 17:21:492015亚冠之山东鲁能
日期:2015-07-07 18:48:39摩羯座
日期:2014-08-29 23:01:42
2 [报告]
发表于 2014-02-21 21:27 |只看该作者
异常处理会回到先前指令在执行一次,,按理应该循环执行无限次

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
3 [报告]
发表于 2014-02-21 22:00 |只看该作者
整数被0除是硬件错误,没有什么确定的行为,正如文档所指:
According  to POSIX, the behavior of a process is undefined after it ignores a SIGFPE, SIGILL, or SIGSEGV sig‐
nal 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.

论坛徽章:
0
4 [报告]
发表于 2014-02-21 22:13 |只看该作者
回复 2# tc1989tc


我不是特别明白你的意思,只是对于SIGFPE这个信号是这个结果,换成其他信号比如SIGINT就不会出现这样的问题。

论坛徽章:
0
5 [报告]
发表于 2014-02-21 22:13 |只看该作者
本帖最后由 ragingCow 于 2014-02-21 22:27 编辑

回复 3# timespace


嗯,谢谢,看来对于这样的错误最好的错误就是让它出错了。

论坛徽章:
16
CU十二周年纪念徽章
日期:2013-10-24 15:41:3415-16赛季CBA联赛之广东
日期:2015-12-23 21:21:55青铜圣斗士
日期:2015-12-05 10:35:30黄金圣斗士
日期:2015-11-26 20:42:16神斗士
日期:2015-11-19 12:47:50每日论坛发贴之星
日期:2015-11-18 06:20:00程序设计版块每日发帖之星
日期:2015-11-18 06:20:002015亚冠之城南
日期:2015-11-10 19:10:492015亚冠之萨济拖拉机
日期:2015-10-28 18:47:282015亚冠之柏太阳神
日期:2015-08-30 17:21:492015亚冠之山东鲁能
日期:2015-07-07 18:48:39摩羯座
日期:2014-08-29 23:01:42
6 [报告]
发表于 2014-02-21 22:40 |只看该作者
建议你谷歌异常和中断的区别,你就会明白了!例如缺页异常就是利用这样的效果来实现页表映射

论坛徽章:
13
双鱼座
日期:2013-10-23 09:30:05数据库技术版块每日发帖之星
日期:2016-04-20 06:20:00程序设计版块每日发帖之星
日期:2016-03-09 06:20:002015亚冠之塔什干火车头
日期:2015-11-02 10:07:452015亚冠之德黑兰石油
日期:2015-08-30 10:07:07数据库技术版块每日发帖之星
日期:2015-08-28 06:20:00数据库技术版块每日发帖之星
日期:2015-08-05 06:20:002015年迎新春徽章
日期:2015-03-04 09:57:09辰龙
日期:2014-12-03 14:45:52酉鸡
日期:2014-07-23 09:46:23亥猪
日期:2014-03-13 08:46:22金牛座
日期:2014-02-11 09:36:21
7 [报告]
发表于 2014-02-22 09:44 |只看该作者
学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP