- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3.3.3信号(Signal)处理
3.3.3 信号(Signal)处理
信号(signal)是向进程发送的软件通知,通知进程有事件发生。引发信号的事件发生时,信
号就被生成(generate)了。进程根据信号采取行动时,信号就被传递(deliver)了。信号的
寿命(lifetime)就是信号的生成和传递之间的时间间隔。已经生成但还未被传递的信号被称
为挂起(pending)的信号。在信号生成和信号传递之间可能会有相当长的时间。传递信号时,
进程必须在处理器上运行。
如果在传递信号时,进程执行了信号处理程序(signal handler),那么进程就捕捉(catch)
到了这个信号。程序可以使用用户编写的函数名作为参数调用 sigaction来安装用户自定义
的信号处理程序;或者以 SIG_DFL或 SIG_IGN作为参数调用 sigaction函数,SIG_DFL表示
采取默认的动作,SIG_IGN表示忽略信号,这两个动作都不是在“捕捉”信号。如果将进程
设置为忽略(ignore)某个信号,那么在传递时那个信号就会被丢弃,不会对进程产生影响。
信号生成时所采取的动作取决于那个信号当前使用的信号处理程序和进程信号掩码
(process signal mask)。信号掩码中包含一个当前被阻塞信号(blocked signal)的列表。
阻塞一个信号很容易和忽略一个信号混淆起来。被阻塞的信号不会像被忽略的信号一样被丢
弃。如果一个挂起信号被阻塞了,那么当进程解除了对那个信号的阻塞时,信号就会被传递
出去。程序通过调用 sigprocmask 改变它的进程信号掩码来阻塞一个信号,而通过调用
sigaction将信号处理程序设置为 SIG_IGN来忽略一个信号。
注意,信号最初是在多进程系统中引入,而本节的重点在于讲述多线程系统中如何处理信号。
本节所涉及的函数、数据类型和宏定义都需要使用 signal.h头文件。
3.3.3.1 产生信号
每个信号都有一个以 SIG开头的符号名。信号的名字都定义在 signal.h中,任何一个使用
了信号的 C 程序中都要包含这个文件。信号的名字都是某个大于 0 的小整数的宏定义。表
3.10中描述了必须的 POSIX信号,并列出了它们的默认行为。有两个信号 SIGUSR1和 SIGUSR2
是提供给用户使用的,没有预先指定的用途。出现某些错误时,会产生诸如 SIGFPE或 SIGSEGV
这样的信号,其它的信号是由 alarm这样特殊的调用产生的。
信号 描述 默认行为
SIGABRT 进程放弃 与实现有关
SIGALRM 报警时钟 为正常终止
SIGBUS 访问了内存对象中的未定义
部分
与实现有关
SIGCHLD 子进程被终止、停止或继续 忽略
SIGCONT 如果进程被停止了,本信号使
进程继续执行
继续
SIGFPE 算术计算中出现了被零除的
错误
与实现有关
SIGHUP 在控制终端或进程上挂起或 非正常终止
终止
SIGILL 无效的硬件指令 与实现有关
SIGINT 交互终端提示信号(通常是
Ctrl-C)
非正常终止
SIGKILL 终止(不能被捕获或忽略) 非正常终止
SIGPIPE 向一个没有读程序的管道写
入
非正常终止
SIGQUIT 交互终端终止:信息转储(通
常为 Ctrl-L)
与实现有关
SIGSEGV 无效的内存引用 与实现有关
SIGSTOP 执行停止(不能被捕捉或忽
略)
停止
SITTERM 终止 非正常终止
SIGTSTP 终端停止 停止
SIGTTIN 后台进程试图进行读操作 停止
SIGTTOU 后台进程试图进行写操作 停止
SIGURG 在套接字上有高带宽数据 忽略
SIGUSR1 用户定义的信号 1 非正常终止
SIGUSR2 用户定义的信号 2 非正常终止
表 3.10 POSIX信号
调用 kill函数可以向指定进程发送指定的信号,调用 raise函数可以使进程向自己发送指
定的信号,调用 alarm函数可以使进程向自己在经过指定的秒数之后发送 SIGALRM信号。由
于这些函数不属于本节的主题,在此不详细介绍,感兴趣的读者可以自己查询这些函数的相
关资料。
3.3.3.2 对信号掩码和信号集进行操作
如前所述,进程可以通过阻塞信号暂时地阻止信号的传递。在传递之前,被阻塞的信号不会
影响进程的行为。进程的信号掩码(signal mask)给出了一个信号集合,对哪些信号进行阻
塞需要通过信号掩码进行设置。信号掩码的类型为 sigset_t。
信号集由下面的五个函数来操作。每个函数的第一个参数都是一个指向 sigset_t的指针。
sigaddset负责将 signo加入信号集
您可能关注的文档
- 2011年华南理工大学翻译硕士MTI考研真题答案解析.pdf
- 2011年江西省教师招聘考试笔试英语高中学段真题答案解析.pdf
- 2011年燕山大学翻译硕士MTI考研真题解析及复习方向解析.pdf
- 2011年英语非中心城区一模二模完形填空整理 -- Rush_FTK.docx
- 2011年英语非中心城区一模二模阅读C_D篇整理 -- Rush_FTK.docx
- 2011年青岛大学翻译硕士MTI考研真题答案解析.pdf
- 2011年高等学校招生全国统一考试 英语(安徽卷).doc
- 2011年高等学校招生全国统一考试(安徽卷.doc
- 2011改善皮肤最好用的方法.pdf
- 2012 AutoCAD初级工程师参考样题.pdf
- 2021海湾消防GST-HX-420BEx 火灾声光警报器安装使用说明书.docx
- 2022海湾消防 GST-LD-8316Ex 手自动转换装置安装使用说明书.docx
- (小升初押题卷)江苏省小升初重难点高频易错培优卷(试题)-2024-2025学年六年级下册数学苏教版.docx
- 2023-2024学年吉林省吉林市舒兰市人教版四年级上册期末考试数学试题.docx
- 2023-2024学年北京市密云区北京版四年级上册期末考试数学试卷.docx
- 2024-2025学年广东省广州市天河区人教版三年级上册期末考试数学试卷.docx
- 2024-2025学年河北省唐山市丰南区人教版五年级上册期末测试数学试卷.docx
- 人教版道德与法治一年级下册第4课《我们有精神》课件.pptx
- 消防蝶阀介绍.pptx
- 室外消火栓设置场所及设置要求.pptx
文档评论(0)