- 1、本文档共19页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《LinuxC从入门到精通》.明日科技.第11章.信号及信号处理课件
Logo Logo Logo Logo Logo Logo Logo Logo Logo Logo 信号概述 本讲大纲: 在终端中查看常见的信号 信号处理 在终端中查看常见的信号 在Linux这个多用户多进程的系统中,信号的存在是必然的,信号可以理解为一个软中断,在某个条件下,系统会发出某个信号给正在运行的进程,通知进程需要去执行某一特定的事件。 在前面的进程控制一章中,介绍了在终端中可以使用kill命令查看Linux系统中所支持的信号,这些信号都是以SIG开头的,接下来对Linux系统中常见的信号进行介绍。 11.1.1 在终端中查看常见的信号 在终端中输入命令“kill –l”可以列出Linux系统中的所有信号,如图11.1所示。 ? 说明:图11.1中,每一个信号类型前面都有一个正整数,这个正整数与信号代表相同的含义,称之为信号编号。 信号的宏定义和编号都定义在signal.h头文件中。在终端中可以通过输入命令“man 7 signal”查看Linux系统中支持的信号的详细含义,如图11.2所示。 信号处理 信号作为一种进程间通信的机制,主要用于处理异步事件,通常如果有信号发送到正在执行的进程中时,进程会有如下3种处理信号的方法: (1)默认信号的处理方法,系统为每一个信号都设置了默认的处理方法,通常为终止进程。 (2)捕捉信号,使进程执行指定的程序代码。 (3)忽略信号,对该信号不做任何处理。进程继续执行。 这3种处理捕捉到的信号的方法只是比较基本的方法,在实际应用中,对信号的处理并不会这么单一,例如,有些进程在执行时不希望被信号突然打断,但是还不希望忽略此信号,此时进程会将该信号挂起,在需要时在处理该信号。 产生信号 本讲大纲: kill()函数 raise()函数 alarm()函数 kill()函数 前面介绍的在终端中通过kill命令产生信号的方法,原理主要是kill命令调用了kill()函数实现了这个功能。 kill()函数主要用于向指定的进程或进程组发送信号,该函数的定义形式为: #includesys/types.h #includesignal.h Int kill(pid_t pid,int sig); 参数pid为进程号或进程组号;参数sig为要发送的信号类型的编号。 参数pid的取值范围不同,发送的信号触发的事件也是不同的,其取值范围如下: t pid=0:将信号发送到当前进程所在的进程组里的每一个进程。 t pid=-1:将信号发送给除了init进程外的当前进程中有权发送的所有进程。 t pid-1:将信号发送给进程组(-pid)中的每一个进程。 t 如果pid为一个有效的进程或进程组号,信号将发送给pid所代表的进程或进程组。 说明:如果参数sig为0,就没有信号可以发送,但会进行错误检查。 raise()函数 raise()函数主要用于将信号发送给当前进程。raise()函数的原型为: #includesignal.h Int raise(int sig); 参数sig为发送的信号类型的编号。 如果函数调用成功,返回值为0;如果调用失败,返回值为非0。 ? 说明:由raise()函数的功能可以知道,使用kill()函数也可以实现这一功能,如kill(getpid(),sig)。 alarm()函数 alarm()函数主要用于为发送的信号设定一个时间警告,使系统在设定的时间之后发送信号。alarm()函数的原型为: #includeunistd.h unsigned int alarm(unsigned int seconds); 参数seconds为设定的时间值。如果seconds设置为0值,那么alarm()函数设置的警告时钟将无效。 alarm()函数安排在seconds时间之后,发送一个信号SIGALRM给进程。在默认的情况下,进程接收到SIGALRM信号会终止运行。如果不希望终止进程,可以在进程捕获到该信号后修改默认的处理函数。 调用alarm()函数后,之前设置的任何警告时钟都取消。 标题 捕捉信号 本讲大纲: signal()函数 sigaction()函数 signal()函数 sigaction()函数 标题 信号的阻塞 本讲大纲: sigprocmask()函数 sigsuspend()函数 sigpending()函数 sigprocmask()函数 在前面介绍信号处理时,提到了信号的处理并没有那么的简单,而是有的时候进程并不希望被突如其来的信号中断当前的执行,也不希望信号从此被忽略掉,而是希望过一段时间之后再去处理这个信号,这种情况下,可以使用阻塞信号的方法来实现。能够实现信号阻塞的操作有3个系统调用函数,分别是sigpro
您可能关注的文档
最近下载
- GB∕T 37903-2019 数控压力机可靠性评定方法.pdf
- SL 274-2020 碾压式土石坝设计规范.docx
- 《植物生产与环境》课程标准.pdf VIP
- 《植物生产与环境》课程标准.pdf
- bosch博世 GBH 5-38 X GBH 5-38 D 使用说明书.pdf
- 最新版入团志愿书模板.pdf
- 职业技术学院园林技术专业《植物生产环境》课程标准 .pdf VIP
- 国内某600MW机组双烟道直流炉省煤器旁路特性研究.pdf VIP
- 《中医基础理论》课件——津液的代谢和生理功能.pptx VIP
- 8 推翻帝制 民族觉醒 第一课时说课稿 -2023-2024学年道德与法治五年级下册统编版.docx
文档评论(0)