02_linux信號专题讲座-v101-王保明.docx

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

linux信号-应用编程-专题讲座 written by 王保明linux信号基本概念1基本概念中断中断是系统对于异步事件的响应中断信号中断源现场信息中断处理程序中断向量表异步事件的响应:进程执行代码的过程中可以随时被打断,然后去执行异常处理程序生活中的中断和计算机系统中的中断无中断生活场景张三看书,厨房烧水2)有中断的生活场景张三看书,设置闹钟,厨房烧水。闹钟发出中断信号,张三把书合好(第20页),去厨房把开水事情处理好,张三重新打开20页进行阅读。3)计算机系统的中断场景中断源发出中断信号,CPU判断中断是否屏蔽屏蔽、保护现场 ,cpu执行中断处理程序, cpu恢复现场,继续原来的任务。4)中断的其他概念中断向量表保存了中断处理程序的入口地址。中断个数固定,操作系统启动时初始化中断向量表。中断有优先级(有人敲门,有人打电话,有优先级)中断可以屏蔽(张三可以屏蔽电话)。中断分类硬件中断(外部中断)外部中断是指由外部设备通过硬件请求的方式产生的中断,也称为硬件中断软件中断(内部中断)内部中断是由CPU运行程序错误或执行内部程序调用引起的一种中断,也称为软件中断。x86平台INT指令 ARM软中断指令SWI信号概念信号是UNIX系统响应某些状况而产生的事件,进程在接收到信号时会采取相应的行动。信号是因为某些错误条件而产生的,比如内存段冲突、浮点处理器错误或者非法指令等信号是在软件层次上对中断的一种模拟,所以通常把它称为是软中断 信号和中断的区别信号与中断的相似点:(1)采用了相同的异步通信方式;(2)当检测出有信号或中断请求时,都暂停正在执行的程序而转去执行相应的处理程序;(3)都在处理完毕后返回到原来的断点;(4)对信号或中断都可进行屏蔽。信号与中断的区别:(1)中断有优先级,而信号没有优先级,所有的信号都是平等的;(2)信号处理程序是在用户态下运行的,而中断处理程序是在核心态下运行;(3)中断响应是及时的,而信号响应通常都有较大的时间延迟。2信号名称及常用信号信号名称描述SIGABRT进程停止运行 6SIGALRM警告钟SIGFPE算述运算例外SIGHUP系统挂断SIGILL非法指令SIGINT终端中断 2SIGKILL停止进程(此信号不能被忽略或捕获)SIGPIPE向没有读者的管道写入数据SIGSEGV无效内存段访问SIGQUIT终端退出 3SIGTERM终止 SIGUSR1用户定义信号1SIGUSR2用户定义信号2SIGCHLD子进程已经停止或退出 SIGCONT如果被停止则继续执行SIGSTOP停止执行SIGTSTP终端停止信号SIGTOUT后台进程请求进行写操作SIGTTIN后台进程请求进行读操作实验1:kill –l可以查看linux内核支持的信号Man 7 signal 查看信号的默认动作、信号的含义3信号处理进程对信号的三种相应 忽略信号 不采取任何操作、有两个信号不能被忽略:SIGKILL(9号信号)和SIGSTOP。思考1:为什么进程不能忽略SIGKILL、SIGSTOP信号。(如果应用程序可以忽略这2个信号,系统管理无法杀死、暂停进程,无法对系统进行管理。)。SIGKILL(9号信号)和SIGSTOP信号是不能被捕获的。捕获并处理信号 内核中断正在执行的代码,转去执行先前注册过的处理程序。执行默认操作 默认操作通常是终止进程,这取决于被发送的信号。信号的默认操作:通过 man 7 signal 进程查看man 7 signal 编程实践:让应用程序捕捉ctrl+c信号以ctrl+c 会产生一个中断。当前应用程序捕捉ctrl+c中断信号。4信号signal函数编程实践signal信号安装函数signal函数,作用1:站在应用程序的角度,注册一个信号处理函数。 作用2:忽略信号、设置信号默认处理 信号的安装和恢复typedef void (*__sighandler_t) (int);#define SIG_ERR ((__sighandler_t) -1) #define SIG_DFL ((__sighandler_t) 0) #define SIG_IGN ((__sighandler_t) 1) 函数原型:__sighandler_t signal(int signum, __sighandler_t handler);参数signal是一个带signum和handler两个参数的函数,准备捕捉或屏蔽的信号由参数signum给出,接收到指定信号时将要调用的函数由handler给出handler这个函数必须有一个int类型的参数(即接收到的信号代码),它本身的类型是voidhandler也可以是下面两个特殊值: SIG_IGN屏蔽该信号 SIG_DFL恢复默认行为编程实践 注册SIGINT、注册SIG

文档评论(0)

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

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

1亿VIP精品文档

相关文档