Linux中与信号.ppt

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
xlanchen@2007.10.25 Linux OS analysis Linux操作系统分析 中国科学技术大学计算机系 陈香兰(0512 xlanchen@ustc.edu.cn 助教:裴建国、冯晓静 Autumn 2008 Linux中的信号 中国科学技术大学计算机系 陈香兰(0512 xlanchen@ustc.edu.cn 助教:裴建国、冯晓静 Autumn 2008 信号 信号在最早的Unix系统中就已经被引入了,用于在用户态进程间通信。 内核也用信号通知进程系统所发生的事情 信号 信号是很短的消息 标准信号 标准信号没有给参数、消息或是其他相随的信息留有空间 通常使用一个数字来标识一个信号 信号可以被发送到一个进程或一组进程。 软件中断的概念 信号的产生和处理方式跟中断有些相似 信号是典型的异步事件(当然也有一些事件是同步错误或异常) 大多数产生信号的事件对进程而言是随机出现 进程不可能做轮询来测试某个标志位或者变量来判别是否发生了一个信号,而是必须告诉内核“在某个信号发生时,应该执行如下操作”,这点跟中断处理例程相似,所以也不难理解标准信号不带参数或者是其他的信息 跟硬件中断一样,任何动作,包括终止进程,都只能由接收到信号的进程来执行,也就是在本进程的上下文中执行 信号的作用 使用信号的两个主要目的是: 让进程知道已经发生了一个特定的事件 强迫进程执行它自己代码中的信号处理程序 很多应用程序提供自己的信号处理程序 系统也会定义一些缺省的信号处理程序 信号的生成 异常 当一个进程出现异常(比如试图执行一个非法指令,除0,浮点溢出等),内核通过向进程发送一个信号来通知进程异常的发生 其他进程 一个进程可以通过kill或是sigsend系统调用向另一个进程或一个进出组发送信号。一个进程也可以向自身发送信号 终端 某些键盘字符如ctrl+c等会向终端的前台进程发送信号 作业控制 发送信号给那些想要读或写终端的后台进程。比如shell使用信号来管理前台和后台进程 配额限制 当一个进程使用超过分配给它的cpu时间或是文件大小的限制,内核发送一个信号给这个进程 通知 一个进程也许要求能被通知某些事件的发生。比如设备已经就绪等待I/O操作 闹钟 定时器产生的信号,由内核发送给进程 Linux/i386中的部分信号 信号举例: “Ctrl+c”组合键 假设用户在console下按下ctrl+c,这将产生终端中断 tty驱动程序能识别出这个组合键,并向自己的前台进程发送一个SIGINT信号。 当对应进程被调度执行时,它将在上下文切换返回到用户态时检查到这个信号。 此外,通常前台进程就是被ctrl+c中断的current进程。当进程从中断返回时,也会检查到这个信号。 检查到信号后,系统就会让进程执行相应的动作。 信号举例:异常 前面讲过,异常也是通过信号来实现的。 当程序发生除0错误或是有非法指令时,将引起一个内核态的trap。 内核trap处理程序识别出这个异常并发送合适的信号到当前进程。 当trap处理程序将要返回到用户态时,会检查并发现信号,进程可能就会被终止。 与信号相关的系统调用 信号传递的两个不同阶段 信号产生 内核更新进程描述符中跟信号相关的数据结构来表示一个信号被发送给了这个进程 信号传递 内核强迫目标进程通过以下方式对信号作出反映: 或改变目标进程的执行状态, 或开始执行一个特定的信号处理程序, 或者两者都是 挂起信号 已经产生但还没有传递的信号称为挂起信号。 任何时候,一个进程仅存在给定类型的一个挂起信号,同一进程同种类型的其他信号不被排队,只被简单的丢弃。 信号的挂起时间长度往往不可预知,原因在于: 信号通常只被current进程传递 进程可以选择阻塞某种信号。这种情况下,在取消阻塞之前进程将不接收这个信号 当进程执行一个信号处理程序函数时,通常屏蔽相应的信号,即自动阻塞这个信号直到处理程序结束。因此,所处理的信号的另一次出现不能中断信号处理程序 信号的应答方式和响应时机 进程以三种方式对一个信号做出应答 1,显式的忽略这个信号 多数信号都可以使用这种方式进行处理。 2,执行系统默认的缺省操作,可以是: Terminate:进程被杀死 Dump:进程被杀死,且如果可能,创建包含进程上下文的可用于调试的core文件 Ignore:简单的忽略信号 Stop:进程被停止,状态置为TASK_STOPPED Continue:如果进程被挂起,则状态置为TASK_RUNNING。否则忽略该信号 3,捕获信号 为了执行用户希望的对某个事件的处理,可以由用户指定某个信号的处理函数。 信号的应答方式和响应时机 注意1:阻塞≠忽略 阻塞仅仅推迟了传递的

文档评论(0)

开心果 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档