



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第33章信号2.产生信号2.1.通过终端按键产生信号上一节讲过,SIGINT的默认处理动作是终止进程,SIGQUIT的默认处理动作是终止进程并且Core Dump,现在我们来验证一下。首先解释什么是Core Dump。当一个进程要异常终止时,可以选择把进程的用户空间内存数据全部保存到磁盘上,文件名通常是core,这叫做Core Dump。进程异常终止通常是因为有Bug,比如非法内存访问导致段错误,事后可以用调试器检查core文件以查清错误原因,这叫做Post-mortem Debug。一个进程允许产生多大的core文件取决于进程的Resource Limit(这个信息保存在PCB中)。默认是不允许产生core文件的,因为core文件中可能包含用户密码等敏感信息,不安全。在开发调试阶段可以用ulimit命令改变这个限制,允许产生core文件。首先用ulimit命令改变Shell进程的Resource Limit,允许core文件最大为1024K:$ ulimit -c 1024然后写一个死循环程序:#include int main(void)while(1);return 0;前台运行这个程序,然后在终端键入Ctrl-C或Ctrl-:$ ./a.out(按Ctrl-C)$ ./a.out(按Ctrl-)Quit (core dumped)$ ls -l core*-rw- 1 akaedu akaedu 147456 2008-11-05 23:40 coreulimit命令改变了Shell进程的Resource Limit,a.out进程的PCB由Shell进程复制而来,所以也具有和Shell进程相同的Resource Limit值,这样就可以产生Core Dump了。2.2.调用系统函数向进程发信号仍以上一节的死循环程序为例,首先在后台执行这个程序,然后用kill命令给它发SIGSEGV信号。$ ./a.out &1 7940$ kill -SIGSEGV 7940$(再次回车)1+ Segmentation fault (core dumped) ./a.out7940是a.out进程的id。之所以要再次回车才显示Segmentation fault,是因为在7940进程终止掉之前已经回到了Shell提示符等待用户输入下一条命令,Shell不希望Segmentation fault信息和用户的输入交错在一起,所以等用户输入命令之后才显示。指定某种信号的kill命令可以有多种写法,上面的命令还可以写成kill -SEGV 7940或kill -11 7940,11是信号SIGSEGV的编号。以往遇到的段错误都是由非法内存访问产生的,而这个程序本身没错,给它发SIGSEGV也能产生段错误。kill命令是调用kill函数实现的。kill函数可以给一个指定的进程发送指定的信号。raise函数可以给当前进程发送指定的信号(自己给自己发信号)。#include int kill(pid_t pid, int signo);int raise(int signo);这两个函数都是成功返回0,错误返回-1。abort函数使当前进程接收到SIGABRT信号而异常终止。#include void abort(void);就像exit函数一样,abort函数总是会成功的,所以没有返回值。2.3.由软件条件产生信号SIGPIPE是一种由软件条件产生的信号,在例30.7 “管道”中已经介绍过了。本节主要介绍alarm函数和SIGALRM信号。#include unsigned int alarm(unsigned int seconds);调用alarm函数可以设定一个闹钟,也就是告诉内核在seconds秒之后给当前进程发SIGALRM信号,该信号的默认处理动作是终止当前进程。这个函数的返回值是0或者是以前设定的闹钟时间还余下的秒数。打个比方,某人要小睡一觉,设定闹钟为30分钟之后响,20分钟后被人吵醒了,还想多睡一会儿,于是重新设定闹钟为15分钟之后响,“以前设定的闹钟时间还余下的时间”就是10分钟。如果seconds值为0,表示取消以前设定的闹钟,函数的返回值仍然是以前设定的闹钟时间还余下的秒数。例33.1.alarm#include #include int main(void)int counter;alarm(1);for(co
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 日语转行法律知识培训课件
- 2024年惠州市龙门县职业技术学校招聘教师笔试真题
- 青园小学期末数学试卷
- 宁乡考编真题数学试卷
- 泊头小升初试题数学试卷
- 内蒙一模联考数学试卷
- 红门卫士风采课件
- 期中考试的答案数学试卷
- 2024年伊春丰林县公安局招聘警务辅助人员笔试真题
- 2024年四川乐山学校招聘教师考试真题
- 中国新能源汽车电池托盘行业市场全景调研及前景战略研判报告
- 化学实验室试剂采购与管理考核试卷
- 人教版七、八年级(共4册)英语单词默写表
- 山地光伏除草施工方案
- 医院培训课件:《查对制度》
- 2024防爆轮式巡检机器人技术规范
- TB10104-2003 铁路工程水质分析规程
- 08J333 建筑防腐蚀构造
- DL∕ T 802.7-2010 电力电缆用导管技术条件 第7部分:非开挖用改性聚丙烯塑料电缆导管
- 突发环境事件应急预案编制要点及风险隐患排查重点课件
- 香港朗文1A-6B全部单词(音标版)
评论
0/150
提交评论