signal函数的使用

signal函数的使用

ID:14213379

大小:23.23 KB

页数:4页

时间:2018-07-26

signal函数的使用_第1页
signal函数的使用_第2页
signal函数的使用_第3页
signal函数的使用_第4页
资源描述:

《signal函数的使用》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、signal函数的使用signal系统函数调用提供了一种最简单的范例。然而,由于C原形声明的缘故使它看起来比实际复杂。signal函数将一个给定的函数和一个特定的信号联系。这里是FreeBSD中的定义(和一个typedef一起):引用:typedefvoid(*sig_t)(int);sig_t  signal(intsig,sig_tfunc);第一个参数是目标信号。func参数是一个指针,指向某个处理该信号的函数。这个处理信号函数带有一个int型参数,并应返回void。signal函数中的func参数也可以设定为下面的一些值:引用:SIG_IGN:如果func参数

2、被设置为SIG_IGN,该信号将被忽略。SIG_DFL:如果func参数被设置为SIG_DFL,该信号会按照确定行为处理。PS:sig信号的可能类型:#defineSIGHUP      1    /*hangup*/SIGHUP是Unix系统管理员很常用的一个信号。许多后台服务进程在接受到该信号后将会重新读取它们的配置文件。然而,该信号的实际功能是通知进程它的控制终端被断开。缺省行为是终止进程。#defineSIGINT      2    /*interrupt*/对于Unix使用者来说,SIGINT是另外一个常用的信号。许多shell的CTRL-C组合使得这个信

3、号被大家所熟知。该信号的正式名字是中断信号。缺省行为是终止进程。#defineSIGQUIT      3    /*quit*/SIGQUIT信号被用于接收shell的CTRL-/组合。另外,它还用于告知进程退出。这是一个常用信号,用来通知应用程序从容的(译注:即在结束前执行一些退出动作)关闭。缺省行为是终止进程,并且创建一个核心转储。#defineSIGILL      4    /*illegalinstr.(notresetwhencaught)*/如果正在执行的进程中包含非法指令,操作系统将向该进程发送SIGILL信号。如果你的程序使用了线程,或者point

4、erfunctions,那么可能的话可以尝试捕获该信号来协助调试。(注意:原文这句为:“Ifyourprogrammakesuseofuseofthreads,orpointerfunctions,trytocatchthissignalifpossibleforaidindebugging.”。中间的两个useofuseof,不知是原书排版的瑕疵还是我确实没有明白其意义;另外,偶经常听说functionspointer,对于pointerfunctions,google了一下,应该是fortran里面的东西,不管怎样,还真不知道,确切含义还请知道的兄弟斧正。)缺省行

5、为是终止进程,并且创建一个核心转储。#defineSIGTRAP      5    /*tracetrap(notresetwhencaught)*/SIGTRAP这个信号是由POSIX标准定义的,用于调试目的。当被调试进程接收到该信号时,就意味着它到达了某一个调试断点。一旦这个信号被交付,被调试的进程就会停止,并且它的父进程将接到通知。缺省行为是终止进程,并且创建一个核心转储。#defineSIGABRT      6    /*abort()*/SIGABRT提供了一种在异常终止(abort)一个进程的同时创建一个核心转储的方法。然而如果该信号被捕获,并且信号处

6、理句柄没有返回,那么进程不会终止。缺省行为是终止进程,并且创建一个核心转储。#defineSIGFPE      8    /*floatingpointexception*/当进程发生一个浮点错误时,SIGFPE信号被发送给该进程。对于那些处理复杂数学运算的程序,一般会建议你捕获该信号。缺省行为是终止进程,并且创建一个核心转储。#defineSIGKILL      9    /*kill(cannotbecaughtorignored)*/SIGKILL是这些信号中最难对付的一个。正如你在它旁边的注释中看到的那样,这个信号不能被捕获或忽略。一旦该信号被交付给一个进

7、程,那么这个进程就会终止。然而,会有一些极少数情况SIGKILL不会终止进程。这些罕见的情形在处理一个“非中断操作”(比如磁盘I/O)的时候发生。虽然这样的情形极少发生,然而一旦发生的话,会造成进程死锁。唯一结束进程的办法就只有重新启动了。缺省行为是终止进程。#defineSIGBUS      10    /*buserror*/如同它的名字暗示的那样,CPU检测到数据总线上的错误时将产生SIGBUS信号。当程序尝试去访问一个没有正确对齐的内存地址时就会产生该信号。缺省行为是终止进程,并且创建一个核心转储。#defineSIGSEGV      1

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。