欢迎来到天天文库
浏览记录
ID:14213379
大小:23.23 KB
页数:4页
时间:2018-07-26
《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
此文档下载收益归作者所有