网站大量收购闲置独家精品文档,联系QQ:2885784924

Linux程序设计-第7章.ppt

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux程序设计-第7章课案

嵌入式操作系统应用开发--Linux程序设计 陈晓雷 第7章 信号处理 7.1 信号概念 7.2 UNIX 信号 7.3 生成信号 7.4 设置信号的动作 7.5 信号句柄 7.6 阻塞信号 7.7 等待信号 7.8 使用分开的信号栈 7.9 信号句柄编程技巧 7.10 实时信号 * 7.1 信号概念 信号是异步传送给进程的一种事件通知 产生信号的原因(生成信号的事件) 程序出错 外部事件 显式请求 同步信号:与程序中的某个具体操作相关并且在那个操作进行的同时产生 异步信号:进程之外的事件生成的信号 * 7.1 信号概念 信号发生时,进程采取的动作 忽略信号:SIGSTOP、SIGKILL除外 捕获信号:捕获函数(句柄)对信号进行专门的处理 执行系统默认动作 流产Core:终止进程,并且生成内存转储文件core 终止Term:终止进程,不生成内存转储文件 忽略Ign:忽略信号 挂起Stop:暂停进程 继续Cont:暂停的进程恢复执行 信号相关术语 生成、发送、交付、接收、捕获、悬挂、屏蔽字、阻塞 7.2 UNIX 信号 系统为每一种可能的事件定义了一种信号,每种信号有一个信号数,并对应有信号名SIG /usr/include/signal.h = asm/signal.h man 7 signal kill –l 表7-1 空信号0 void psignal(int signo, const char *msg); * 7.2 UNIX 信号 7.2.1 程序错误类信号 179 7.2.2 程序中止类信号 180 7.2.3 闹钟类信号 180 7.2.4 I/O类信号 180 7.2.5 作业控制类信号 181 7.2.6 操作错误类信号 181 7.2.7 其他信号 * 7.3 生成信号 硬件自陷、程序错误 终端控制字符和shell命令 Ctrl-c stty –a kill(1) 函数 abort alarm * 7.3 生成信号 7.3.1 raise()函数 int raise (int sig); 进程给自己发送信号sig raise()会阻塞,句柄函数返回时,才会返回 7.3.2 kill()函数 int kill(pid_t, int sig); 发送信号给一个进程或一组进程 参数 pid0: 指定进程 pid==0: 所在组的所有进程进程 pid-1: 进程组ID为pid绝对值 pid==-1: 广播信号,所有进程 例p7-1.c * 7.4 设置信号的动作 7.4.1 signal()函数 typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler); 参数 signum: handler: SIG_DFL:各种信号的默认动作 SIG_IGN:忽略,SIGKILL、SIGSTOP不可 信号句柄:信号捕获函数 * 7.4 设置信号的动作 7.4.1 signal()函数 当信号发生时,如果建立了信号句柄 系统在把控制转到信号句柄之前将阻塞后续新的信号直至信号句柄完成为止--BSD 改变信号的动作为SIG_DFL—系统V(即一次性) Signal()的返回值—指向前一次有效动作的指针 出错:SIG_ERR,errno=EINVAL 例p7-2.c * 7.4 设置信号的动作 7.4.2 进程初启时的信号动作 fork()派生的子进程:继承父进程的信号动作,包括信号屏蔽、捕获函数,以及相关标志 由exec()加载的进程:除调用进程已设置为要忽略的信号之外,其他信号都将设置为默认动作 应用程序(shell-exec()):信号要么忽略,要么默认动作 后台进程:忽略中断和结束信号(SIGINT和SIGQUIT) signal()的局限性: 无法单独查看信号的当前动作 不可靠 * 7.4 设置信号的动作 7.4.3 不可靠信号 catch_sigquit() { //存在时间窗,可能接收到SIGQUIT信号,用默认动作处理,终止冰屑core文件 signal(SIGQUIT, catch_sigquit); //系统V … } main() { signal(SIGQUIT, catch_sigquit); … } BSD扩充了signal()系统调用,可以阻塞新到达的信号从而避免时间窗问题 * 7.4 设置信号的动作 7.4.4 sigaction()函数 int sigaction(int signum, const struct sigaction *act, struct sigaction *oact); sigaction()用来检查或指定与特定信号有

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档