免费注册 查看新帖 |

Chinaunix

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

linux程序崩溃的时候,一定收到操作系统发送的signal11吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-06-12 09:43 |只看该作者 |倒序浏览
10可用积分
一个程序访问一个非法内存地址,导致崩溃,这个崩溃的过程大概是什么样子的?

是不是这个访问指令被OS检测到了,然后OS发送给进程一个signal11,进程收到signal 11然后退出。

进程代码里面如果处理了signal 11的话,就不会崩溃了?

谢谢!

最佳答案

查看完整内容

过程像2楼说的那样,如果当你的应用程序因为非法内存访问导致产生了11信号,并且设置了该信号的处理函数,应用程序是不会中止的;我在RedHat4.7上测试过,自己绑定了11信号,并且处理,非法访问内存时,信号处理函数会被多次调用(有输出打印),通过kill发送11信号时,则会只打印一次;说明在程序中非法访问内存时,就算是有绑定11信号并处理,该信号会一直发送,所以应用程序最好不用绑定11信号来处理内存非法操作,而应避免。测 ...

论坛徽章:
0
2 [报告]
发表于 2012-06-12 09:43 |只看该作者
过程像2楼说的那样,如果当你的应用程序因为非法内存访问导致产生了11信号,并且设置了该信号的处理函数,应用程序是不会中止的;
我在RedHat4.7上测试过,自己绑定了11信号,并且处理,非法访问内存时,信号处理函数会被多次调用(有输出打印),通过kill发送11信号时,则会只打印一次;说明在程序中非法访问内存时,就算是有绑定11信号并处理,该信号会一直发送,所以应用程序最好不用绑定11信号来处理内存非法操作,而应避免。测试过程中,绑定时如果操作为SIG_IGN(忽略),运行也会出现Segmentation fault

论坛徽章:
0
3 [报告]
发表于 2012-06-12 10:15 |只看该作者
回复 1# donet8

os检测到程序访问非法地址,向应用程序发送SIGSEGV 信号,程序接收到SIGSEGV时的默认动作是异常终止,并产生core文件来帮助调试,
SIGSEGV是可以被捕获的,也就是说,应用程序可以请求它们想要的动作,以替代默认发生的动作。这样的动作可以是忽略它,调用一个自定义处理函数,或恢复默认的动作(唯一不能忽略的两个信号是SIGKILL与SIGSTOP),一般而言,忽略SIGSEGV 会产生 未定义行为。
   

论坛徽章:
0
4 [报告]
发表于 2012-06-13 04:30 |只看该作者
很久没碰这块了,很生疏,但直觉告诉我2、3楼回答的不全对,我又说不清楚**问题(感觉是自己定义信号处理这部分理解好像不太对)。

针对一楼的问题,建议你读下以下文档:
1,apue,里面关于信号使用有一章讲解的很详细;
2,linux内核情景分析,他们是针对2.4内核讲解的,你可以读一下,写的很详细。关于信号处理如何实现写的非常清楚。
3,内核情景分析不知道出了2.6版内核的书了没有,如果有,一定要去看下,如果没有就看源码吧。
之所以这样建议,是因为2.6内核针对信号处理部分相较2.4版内核做了很大改变。

希望能对你有用。

论坛徽章:
0
5 [报告]
发表于 2012-06-13 09:50 |只看该作者
samon_fu 发表于 2012-06-13 04:30
很久没碰这块了,很生疏,但直觉告诉我2、3楼回答的不全对,我又说不清楚**问题(感觉是自己定义信号处理这 ...


多谢bz的提醒。

论坛徽章:
0
6 [报告]
发表于 2012-06-13 16:36 |只看该作者
是访问产生exception,在handler里发送signal。是否再会中止要看问题是否解决。

论坛徽章:
0
7 [报告]
发表于 2012-07-02 19:07 |只看该作者
版主,能加下我Q吗?有主要的事情咨询,谢谢啦 QQ:604964471
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP