信号signal处理机制.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
信号signal处理机制

Linux信号signal处理机制 Linux 信号signal处理机制信号机制是进程之间相互传递消息的一种方法信号全称为软中断信号也有人称作软中断从它的命名可以看出它的实质和使用很象中断所以信号可以说是进程控制的一部分 一信号的基本概念 1基本概念 软中断信号signal又简称为信号用来通知进程发生了异步事件进程之间可以互相通过系统调用kill发送软中断信号内核也可以因为内部事件而给进程发送信号通知进程发生了某个事件注意信号只是用来通知某进程发生了什么事件并不给该进程传递任何数据 收到信号的进程对各种信号有不同的处理方法处理方法可以分为三类第一种是类似中断的处理程序对于需要处理的信号进程可以指定处理函数由该函数来处理第二种方法是忽略某个信号对该信号不做任何处理就象未发生过一样第三种方法是对该信号的处理保留系统的默认值这种缺省操作对大部分的信号的缺省操作是使得进程终止进程通过系统调用signal来指定进程对某个信号的处理行为 在进程表的表项中有一个软中断信号域该域中每一位对应一个信号当有信号发送给进程时对应位置位由此可以看出进程对不同的信号可以同时保留但对于同一个信号进程并不知道在处理之前来过多少个 2信号的类型 发出信号的原因很多这里按发出信号的原因简单分类以了解各种信号 1与进程终止相关的信号当进程退出或者子进程终止时发出这类信号2与进程例外事件相关的信号如进程越界或企图写一个只读的内存区域如程序正文区或执行一个特权指令及其他各种硬件错误3与在系统调用期间遇到不可恢复条件相关的信号如执行系统调用exec时原有资源已经释放而目前系统资源又已经耗尽4与执行系统调用时遇到非预测错误条件相关的信号如执行一个并不存在的系统调用5在用户态下的进程发出的信号如进程调用系统调用kill向其他进程发送信号6与终端交互相关的信号如用户关闭一个终端或按下break键等情况7跟踪进程执行的信号 注意信号SIGKILL和SIGSTOP既不能被捕捉也不能被忽略信号SIGIOT与SIGABRT是一个信号可以看出同一个信号在不同的系统中值可能不一样所以建议最好使用为信号定义的名字而不要直接使用信号的值 有关信号的系统调用 系统调用signal是进程用来设定某个信号的处理方法系统调用kill是用来发送信号给指定进程的这两个调用可以形成信号的基本操作后两个调用pause和alarm是通过信号实现的进程暂停和定时器调用alarm是通过信号通知进程定时器到时所以在这里我们还要介绍这两个调用 1signal 系统调用 系统调用signal用来设定某个信号的处理方法该调用声明的格式如下void signalint signum void handlerintint 在使用该调用的进程中加入以下头文件include signalh 上述声明格式比较复杂如果不清楚如何使用也可以通过下面这种类型定义的格式来使用POSIX的定义typedef void sighandler_tint sighandler_t signalint signum sighandler_t handler 但这种格式在不同的系统中有不同的类型定义所以要使用这种格式最好还是参考一下联机手册 在调用中参数signum指出要设置处理方法的信号第二个参数handler是一个处理函数或者是SIG_IGN忽略参数signum所指的信号SIG_DFL恢复参数signum所指信号的处理方法为默认值 传递给信号处理例程的整数参数是信号值这样可以使得一个信号处理例程处理多个信号系统调用signal返回值是指定信号signum前一次的处理例程或者错误时返回错误代码SIG_ERR下面来看一个简单的例子 include signalh include unistdh include stdioh void sigroutineint dunno 信号处理例程其中dunno将会得到信号的值 switch dunno case 1 printfGet a signal -- SIGHUP break case 2 printfGet a signal -- SIGINT break case 3 printfGet a signal -- SIGQUIT break return int main printfprocess id is d getpid signalSIGHUP sigroutine 下面设置三个信号的处理方法signalSIGINT sigroutine signalSIGQUIT sigroutine for 其中信号SIGINT由按下Ctrl-C发出信号SIGQUIT由按

文档评论(0)

sanshengyuan + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档