- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
09_信号ppt - 四川大学计算机学院
信号 引言 信号是软件中断 信号提供了一种处理异步事件的方法 信号机制存在两种不同时期的版本,一种是不可靠信号机制,另一种是可靠的信号机制 信号概念 信号在内核中用一个整数编号表示 C程序中,信号有一个名字,以“SIG”开头 现代Unix系统支持多达30多种不同类型的信号 产生信号的原因 当用户按某些终端键时 硬件异常 进程调用kill系统调用 当检测到某种软件条件已经发生 进程收到信号后的动作 忽略此信号 捕捉信号,执行一个函数 执行系统默认动作 忽略 暂停 终止 终止+core 常用的一些信号 SIGABRT 进程异常终止 SIGALRM 闹钟超时 SIGBUS 硬件故障 SIGCHLD 子进程终止 SIGCONT 停止的进程继续 SIGINT 按中断键 SIGIO 有异步IO事件 SIGKILL 可靠杀死进程 SIGQUIT 按退出键 SIGSEGV 无效内存访问(段违例) SIGSTOP 停止运行的进程 SIGSYS 无效的系统调用 SIGTERM 终止进程(kill默认发出的信号) SIGUSR 用户自定义信号 SIGXCPU 进程超软CPU限制 关于core文件 有些信号的默认动作是“终止+core”,表示,终止进程,并且产生进程core dump core文件是进程的内存映像信息,通过core文件可以对原进程进行调试,找出进程终止的具体原因 signal函数 signal函数是Unix系统提供的信号机制的最简单的接口 void (*signal(int signo, void (*func)(int)))(int); signal将用自定义的信号处理函数替换指定的信号的处理函数 这个函数定义得非常简单,没有考虑很多问题,是一种不可靠的信号处理方式 一种简单的写法 typedef void sigfunc(int);sigfunc signal(int, sigfunc); 一段典型代码 typedef void sigfunc(int); static void handler(int signo) { if (signo == SIGUSR1) printf(“........”); ....... } int main() { sigfunc *old_handler = signal(SIGUSR1, handler); pause(); ...... } 信号引入所面临的几个问题 不可靠的信号 中断的系统调用 函数的重入 不可靠的信号 信号可能会丢失,一个信号发生了,但进程却一直不知道 同时,进程对信号的控制能力也很弱,它只能捕捉信号或忽略它,但不能阻塞延缓信号 一段有问题的代码 int sig_int(int); ... signal(SIGINT, sig_int); ... int sig_int(int signo) { signal(SIGINT, sig_int); /* 再次设置处理函数 */ ... } 早期版本signal的一个问题是,每次接收到信号对其处理时,随即将信号动作恢复为默认动作 从信号发生之后,到信号处理程序中再次调用signal函数之前,这段时间中有一个时间窗口。在此时间窗口中,可能会发生另外一次信号,而第二个信号会导致默认动作 中断的系统调用 早期Unix系统的一个特性是:如果进程在执行一个低速系统调用,而阻塞期间捕捉到一个信号,则该系统调用就被中断不再继续执行,返回一个特定的错误信息EINTR 系统调用被分为低速系统调用和其他系统调用,低速系统调用可能使进程永远阻塞 读某类文件(比如管道、终端、网络) 写这类文件 打开某些类型文件(比如终端) pause、wait等函数 某些进程间通信 系统调用的自动重启 中断的系统调用需要程序员在应用程序中处理 为了帮助应用程序使其不必处理被中断的系统调用,Unix系统中引入了系统调用的自动重启 注意:不同的系统对系统调用的自动重启的配置是不一样的 函数的可重入问题 进程捕捉到信号并对其进行处理时,进程正在执行的指令序列就被信号处理程序临时打断,它首先执行改信号处理函数中的指令,并且在信号处理函数执行完毕后继续执行被打断的主程序。 如果主程序正在调用某些函数,而信号处理函数也调用这类函数,就出现了函数的重入问题。重入可能破坏函数内部的数据结构,导致错误。 函数能否重入?很多函数都是不可重入的,也有一些函数是可重入的。 函数不可重入的原因 函数使用了静态数据结构 函数调用了malloc和free 可靠的信号 首先,内核或者进程产生了一个信号 然后,内核将
您可能关注的文档
- 青阳腔数字虚拟馆的研究与开发 毕业的设计.doc
- 靖边采油厂采油五大队天42井场新建小型成品油加油点工程施工组织的设计.doc
- 靖远电厂三期净化站工程边坡治理施工组织的设计.doc
- 靖西至那坡公路土建工程№3标段施工组织的设计.doc
- 青年城小区安防系统初步的设计方案.doc
- 静压预应力管桩施工组织的设计.doc
- 静安寺交通枢纽及商业开发地墙施工组织的设计.doc
- 静海工程技术中心联合厂房扩建施工组织的设计(含钢结构).doc
- 静态网页的设计教程.ppt
- 非接触式RFID学生考勤系统的的设计.pdf
- 0C172A4E_大專院校理財規劃實務教學教師研習營 - NTOU-Teaching.doc
- 0.5%罗哌卡因切口浸润麻醉对全麻开颅术中血流动力学及血糖的影响.pdf
- 1 42 Paper Bicycle Project 第2回プレゼンテーション 2班 原達也.ppt
- 1 34 Paper Bike Project 最終プレゼンテーション 2班 原達也 西口.ppt
- 1 仪器的工作原理及系统构成.doc
- 1 数字信号处理实验中心概况doc - 数字通信实验室状况一览表.doc
- 1.1资评与市场经济.doc
- 1.2资评的特点与种类.doc
- 1.4资评的主客体.doc
- 1.6资评与会计审计的关系.doc
文档评论(0)