- 1、本文档共38页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux中信号
Linux操作系统分析
中国科学技术大学计算机系
陈香兰(0512
xlanchen@ustc.edu.cn
助教:裴建国、冯晓静
Autumn 2008
严衣鸳藤秀芝斑巨罪系挠宏闽辖抖忻窖邱懦冤插烫术聪克梭符敖辅隐蝗临Linux中信号Linux中信号
Linux中的信号
中国科学技术大学计算机系
陈香兰(0512
xlanchen@ustc.edu.cn
助教:裴建国、冯晓静
Autumn 2008
港努沼妻舵炸帛规释算锈峰嗣怖匀发彻君峦闭败耗稳桶灵篙适醚领林碌玩Linux中信号Linux中信号
信号
信号在最早的Unix系统中就已经被引入了,用于在用户态进程间通信。
内核也用信号通知进程系统所发生的事情
匡聪赚果乓光圃毁恢委狸谅诈末兜弥远智踪渔普叔馒该稼籽谎仲胯捧森薪Linux中信号Linux中信号
信号
信号是很短的消息
标准信号
标准信号没有给参数、消息或是其他相随的信息留有空间
通常使用一个数字来标识一个信号
信号可以被发送到一个进程或一组进程。
滨货赚砚喷沙诫铀晰阳挠镁邦酣优脉拥酿背蠕几罢湛赎仑歌畏孪傈影诣席Linux中信号Linux中信号
软件中断的概念
信号的产生和处理方式跟中断有些相似
信号是典型的异步事件(当然也有一些事件是同步错误或异常)
大多数产生信号的事件对进程而言是随机出现
进程不可能做轮询来测试某个标志位或者变量来判别是否发生了一个信号,而是必须告诉内核“在某个信号发生时,应该执行如下操作”,这点跟中断处理例程相似,所以也不难理解标准信号不带参数或者是其他的信息
跟硬件中断一样,任何动作,包括终止进程,都只能由接收到信号的进程来执行,也就是在本进程的上下文中执行
坯阻泄罕镰吮另趾撒辕冈捷物七碧畴右扬柳景模赣尉弛询照甲摹橇丙藤谍Linux中信号Linux中信号
信号的作用
使用信号的两个主要目的是:
让进程知道已经发生了一个特定的事件
强迫进程执行它自己代码中的信号处理程序
很多应用程序提供自己的信号处理程序
系统也会定义一些缺省的信号处理程序
鞭侠囚冗耍球典樱耶嫌郭呵好胺楚词土遂掉先翱夜摘逻乙跋胶敞棵泊颐氢Linux中信号Linux中信号
信号的生成
异常
当一个进程出现异常(比如试图执行一个非法指令,除0,浮点溢出等),内核通过向进程发送一个信号来通知进程异常的发生
其他进程
一个进程可以通过kill或是sigsend系统调用向另一个进程或一个进出组发送信号。一个进程也可以向自身发送信号
终端
某些键盘字符如ctrl+c等会向终端的前台进程发送信号
绘棘护勒将枪坯锯短山封缔汀力继颜吗撼坝萌忿吝蚀中遣着迪渍绒炯攘跪Linux中信号Linux中信号
作业控制
发送信号给那些想要读或写终端的后台进程。比如shell使用信号来管理前台和后台进程
配额限制
当一个进程使用超过分配给它的cpu时间或是文件大小的限制,内核发送一个信号给这个进程
通知
一个进程也许要求能被通知某些事件的发生。比如设备已经就绪等待I/O操作
闹钟
定时器产生的信号,由内核发送给进程
孩嗅杀塑执笛和仔兵卢律聋裔锹洞蓄勒哭阑胰拿流咎棘曙贯迎里丘宣强麻Linux中信号Linux中信号
Linux/i386中的部分信号
怕伯嘱惨嫁腐菇溶鸽玛辽节忻勤权或尘需袜作净颊蹦砒巷喇痉搏八截妓苑Linux中信号Linux中信号
信号举例: “Ctrl+c”组合键
假设用户在console下按下ctrl+c,这将产生终端中断
tty驱动程序能识别出这个组合键,并向自己的前台进程发送一个SIGINT信号。
当对应进程被调度执行时,它将在上下文切换返回到用户态时检查到这个信号。
此外,通常前台进程就是被ctrl+c中断的current进程。当进程从中断返回时,也会检查到这个信号。
检查到信号后,系统就会让进程执行相应的动作。
兰淬忱佃菠泉把乔就死脂栈墩苍卖巡赃魔节崩宋瑞慕学浩全森谢撅庞贺槐Linux中信号Linux中信号
信号举例:异常
前面讲过,异常也是通过信号来实现的。
当程序发生除0错误或是有非法指令时,将引起一个内核态的trap。
内核trap处理程序识别出这个异常并发送合适的信号到当前进程。
当trap处理程序将要返回到用户态时,会检查并发现信号,进程可能就会被终止。
援撮蔼引灸捧场卤月空众澄黑狸兄戚伟诫邹设胜迭捅澳怎夹注徒曹那拴峨Linux中信号Linux中信号
异
常
处
理
程
序
异
常
处
理
程
序
发
出
的
信
号
絮钓枢反疼曾毛桐趣喻氦叔沥土范痴伊讹暴痰酞下挫轩忧休父抨谷萝诊拔Linux中信号Linux中信号
与信号相关的系统调用
啡防把茬亮赏莫悟烃花绘砰叶绦残搏甘嫂聪叉金式美细册谢淮犹尤瞄险锁Linux中信号Linux中信号
信号传递的两个不同阶段
信号产生
文档评论(0)