- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第7章 信号· 信号捕获· 时序竞态· SIGCHLD信号· 信号的分类· 信号的产生方式· 信号阻塞目录页Part 1Part 3Part 2信号及信号来源信号的产生信号阻塞Part 4Part 5Part 6信号捕获SIGCHLD信号时序竞态目录页Part 3Part 2Part 1信号及信号来源信号的产生信号阻塞7.1 信号及信号来源使用kill命令杀死进程的实质,是向目标进程发送了一个信号,当目标进程接收到这个信号后,会根据信号的处理函数,执行指定动作。信号(signal),全称软中断信号,其本质是软件层次上对中断机制的一种模拟,用于提醒进程,某件事情已经发生。7.1 信号及信号来源Unix早期版本中就提供了信号模型,但当时的信号模型并不可靠,信号容易丢失,之后加州伯克利大学和美国的ATT公司对信号模型做了改进,添加了可靠信号机制,POSIX标准又对可靠信号的功能和应用接口进行了标准化,逐渐发展出了如今Linux系统中使用的信号。使用“kill –l”命令可查看系统中的信号。1~31号:常规信号34~64号:实时信号7.1 信号及信号来源信号被应用于进程间通信,但信号实际并不由进程发送,在遇到某种情况时,内核会发送某个信号到某个进程。通常产生信号的情况有以下五种:(1)组合按键。(2)系统检测到硬件异常。(3)满足某种软件条件。(4)通过系统调用发送信号。(5)在终端通过命令发送信号。7.1 信号及信号来源Linux系统中的信号可能会处于几个状态,分别为:发送状态、阻塞状态、未决状态、递达状态和处理状态。发送状态:当某种情况驱使内核发送信号时,信号会有一个短暂的发送状态;阻塞状态:由于某种原因,发送的信号无法被传递,将处于阻塞状态;未决状态:发送的信号被阻塞,无法到达进程,内核就会将该信号的状态设置为未决;递达状态:若信号发送后没有阻塞,信号就会被成功传递并到达进程,此时为递达状态;处理状态:信号被递达后会被立刻处理,此时信号处于处理状态。7.1 信号及信号来源信号递达进程后才可能被处理,信号的处理方式有三种:忽略、捕捉和执行默认动作。(1)忽略:大多数信号都可以被忽略,但9号信号SIGKILL和19号信号SIGSTOP是超级用户杀死进程的可靠方法,不能被忽略。(2)捕获:对信号做捕获处理时,进程通常需要先为该信号设置信号响应函数,这是一个回调函数,当指定信号产生时,内核会为该进程调用并执行对应的信号响应函数。9号信号SIGKILL和19号信号SIGSTOP同样不能被捕获。(3)执行默认动作:系统为每个信号设置了一些默认动作,当信号递达,进程又未设置信号的响应函数时,系统会对进程执行信号的默认动作。7.1 信号及信号来源信号的默认动作有五个,分别为Term、Ign、Core、Stop和Cont,每个动作代表的含义如下:Term:终止进程;Ign:忽略信号;Core:终止进程,并生成Core文件;Stop:暂停进程;Cont:继续运行进程。表7-1%20常规信号属性表.docx点击查看常规信号属性表目录页Part 3Part 2Part 1信号及信号来源信号的产生信号阻塞7.2 信号的产生信号的产生方式有五种,其中用户比较容易控制的信号产生方式有:组合按键方式、shell命令方式和系统调用。本节主要以系统调用为主,讲解信号产生的方式。7.2.1 系统调用系统调用中发送信号常用的函数有kill()、raise()、abort()等,其中kill是最常用的函数,该函数的作用是给指定进程发送信号,但是否杀死进程,取决于所发送信号的默认动作。kill()存在于函数库signal.h中,其函数声明如下:int kill(pid_t pid, int sig);· 若函数调用成功,则返回0;否则返回-1,并设置errno。· kill()函数有两个参数:pid表示接收信号的进程的pid,sig表示要发送的信号的编号。7.2.1 系统调用系统调用中发送信号常用的函数有kill()、raise()、abort()等,其中kill是最常用的函数,该函数的作用是给指定进程发送信号,但是否杀死进程,取决于所发送信号的默认动作。kill()存在于函数库signal.h中,其函数声明如下:int kill(pid_t pid, int sig);· 参数pid的不同取值会影响kill()函数作用的进程,其取值可分为4种情况,每种取值代表的含义如下:若pid 0,则发送信号sig给进程号为pid的进程;若pid = 0,则发送信号sig给当前进程所属组中的所有进程;若pid = -1,则发送信号sig给除1号进程与当前进程的所有进程;若pid -1,则发送信号sig给属于进程组-pid的所有进程。7.2.1 系统调
文档评论(0)