版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式操作系统应用开发--Linux程序设计陈晓雷
第7章
信号处理7.1信号概念7.2
UNIX信号7.3生成信号7.4设置信号的动作7.5信号句柄7.6阻塞信号7.7等待信号7.8使用分开的信号栈7.9信号句柄编程技巧7.10实时信号37.1信号概念信号是异步传送给进程的一种事件通知产生信号的原因(生成信号的事件)程序出错外部事件显式请求同步信号:与程序中的某个具体操作相关并且在那个操作进行的同时产生异步信号:进程之外的事件生成的信号47.1信号概念信号发生时,进程采取的动作忽略信号:SIGSTOP、SIGKILL除外捕获信号:捕获函数(句柄)对信号进行专门的处理执行系统默认动作流产Core:终止进程,并且生成内存转储文件core终止Term:终止进程,不生成内存转储文件忽略Ign:忽略信号挂起Stop:暂停进程继续Cont:暂停的进程恢复执行信号相关术语生成、发送、交付、接收、捕获、悬挂、屏蔽字、阻塞7.2UNIX信号系统为每一种可能的事件定义了一种信号,每种信号有一个信号数,并对应有信号名SIG/usr/include/signal.h=>asm/signal.hman7signalkill–l表7-1空信号0voidpsignal(intsigno,constchar*msg);57.2UNIX信号7.2.1程序错误类信号 1797.2.2程序中止类信号 1807.2.3闹钟类信号 1807.2.4I/O类信号 1807.2.5作业控制类信号 1817.2.6操作错误类信号 1817.2.7其他信号67.3生成信号硬件自陷、程序错误终端控制字符和shell命令Ctrl-cstty–akill(1)函数abortalarm77.3生成信号7.3.1
raise()函数intraise(intsig);进程给自己发送信号sigraise()会阻塞,句柄函数返回时,才会返回7.3.2
kill()函数intkill(pid_t,intsig);发送信号给一个进程或一组进程参数pid>0:指定进程pid==0:所在组的所有进程进程pid<-1:进程组ID为pid绝对值pid==-1:广播信号,所有进程例p7-1.c87.4设置信号的动作7.4.1
signal()函数typedefvoid(*sighandler_t)(int);sighandler_tsignal(intsignum,sighandler_thandler);参数signum:handler:SIG_DFL:各种信号的默认动作SIG_IGN:忽略,SIGKILL、SIGSTOP不可
信号句柄:信号捕获函数97.4设置信号的动作7.4.1
signal()函数当信号发生时,如果建立了信号句柄系统在把控制转到信号句柄之前将阻塞后续新的信号直至信号句柄完成为止--BSD改变信号的动作为SIG_DFL—系统V(即一次性)Signal()的返回值—指向前一次有效动作的指针出错:SIG_ERR,errno=EINVAL例p7-2.c107.4设置信号的动作7.4.2进程初启时的信号动作fork()派生的子进程:继承父进程的信号动作,包括信号屏蔽、捕获函数,以及相关标志由exec()加载的进程:除调用进程已设置为要忽略的信号之外,其他信号都将设置为默认动作应用程序(shell->exec()):信号要么忽略,要么默认动作后台进程:忽略中断和结束信号(SIGINT和SIGQUIT)signal()的局限性:无法单独查看信号的当前动作不可靠117.4设置信号的动作7.4.3不可靠信号
catch_sigquit() {
//存在时间窗,可能接收到SIGQUIT信号,用默认动作处理,终止冰屑core文件 signal(SIGQUIT,catch_sigquit);//系统V … }main(){ signal(SIGQUIT,catch_sigquit); … }BSD扩充了signal()系统调用,可以阻塞新到达的信号从而避免时间窗问题127.4设置信号的动作7.4.4
sigaction()函数intsigaction(intsignum,conststructsigaction*act,structsigaction*oact);sigaction()用来检查或指定与特定信号有关的动作参数signum:除SIGHILL和SIGSTOP外的任何信号参数act:NULL或指定动作参数oact:NULL或返回先前的动作返回值:成功0,失败-1structsigaction{ void(*sa_handler)();//传统信号句柄、SIG_DFL、SIG_IGN void(*sa_sigaction)(int,siginfo_t*,void*);//另一信号句柄sigset_tsa_mask;//信号句柄执行期间要阻塞的一组信号intsa_flags;//若干控制标志组合}137.4设置信号的动作7.4.4
sigaction()函数147.5信号句柄信号句柄—信号捕获函数,信号到达时调用两种基本策略句柄函数仅做简单处理,设置标志,正常返回对信号适当处理,然后让句柄终止程序运行7.5.1正常返回的信号句柄用于此策略的信号:SIGALRM、I/O、进程通信的信号sig_atomic_t数据类型例:p7-4.c157.5信号句柄7.5.2终止进程的句柄用于此策略的信号:程序错误信号和交互中断信号句柄函数通常完成一次必要的清场工作、报告错误、终止程序的运行终止运行的两种方法:调用exit()或abort()设置信号默认动作,再次生成同一信号典型代码167.6阻塞信号阻塞信号—操作系统保持该信号并推迟它的发送被阻塞的信号不会丢失,只是暂时悬挂,直到阻塞解除每个进程有一个信号屏蔽字,它包含当前被阻塞的信号的集合7.6.1
sigset_t类型和信号集操作sigset_t类型表示的信号集合只能用下属五个函数来操作intsigemptyset(sigset_t*set);intsigfillset(sigset_t*set);intsigaddset(sigset_t*set,intsigno);intsigdelset(sigset_t*set,intsigno);intsigismember(sigset_t*set,intsigno);177.6阻塞信号7.6.2设置信号屏蔽信号屏蔽继承于其父进程改变信号屏蔽的途径sigaction()—仅信号句柄执行期间起作用sigprocmask()intsigprocmask(inthow,constsigset_t*set,sigset_t*oset);how:SIG_BLOCK、SIG_UNBLOCK、SIG_SETMASKset:NULL、新的信号集合oset:NULL、老的信号集合不能阻塞SIGKILL和SIGSTOP例:p7-5.c187.6阻塞信号7.6.3检查悬挂信号悬挂信号:已经发生但由于阻塞环未交付的信号intsigpending(sigset_t*set);查看悬挂信号并存于set例:p7-6.c197.7等待信号等待信号方法忙等待pause()和sigsuspend()7.7.1
pause()函数intpause(void);悬挂调用进程直到有信号到达返回-1并errno=EINTR使用简单,但不可靠分析代码207.7等待信号7.7.2
sigsuspend()函数intsigsuspend(constsigset_t*sigmask);参数sigmask所指的信号集临时替代调用进程的信号屏蔽字,然后挂起调用进程,直到有不属于sigmask的信号到达为止返回-1并errno=EIN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年场项目投标失败后的合同履行监督与违约责任合同4篇
- 二零二五版高性能门窗材料供应与加工合同4篇
- 2025年度苗木种植项目招投标合同4篇
- 2025年度废油品回收处理承包合同样本4篇
- 2025年度重型卡车维修场地使用权转让合同4篇
- 基于物联网的2025年度智能农业种植管理与销售合同3篇
- 二零二五年纯净水生产线环保设施升级合同3篇
- 个性化借款利息合同样本2024版一
- 二零二四年危险品运输司机车辆维护保养聘用合同范本3篇
- 2025年城市综合体沉降观测与景观设计合同4篇
- 2025年温州市城发集团招聘笔试参考题库含答案解析
- 2025版高考物理复习知识清单
- 2024年度工作总结与计划标准版本(2篇)
- 全球半导体测试探针行业市场研究报告2024
- 2024年注册计量师-一级注册计量师考试近5年真题附答案
- 2023-2024学年深圳市高一年级下册英语期末考试题(含答案)
- 工程管理重大风险应对方案
- 直播带货助农现状及发展对策研究-以抖音直播为例(开题)
- 《光伏发电工程工程量清单计价规范》
- (完整版)保证药品信息来源合法、真实、安全的管理措施、情况说明及相关证明
- 营销专员绩效考核指标
评论
0/150
提交评论