关键词不能为空

当前您在: 主页 > 英语 >

signal函数的使用

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-11 01:09
tags:

-

2021年2月11日发(作者:signs)


signal


函数的使用





signal

系统函数调用提供了一种最简单的范例。


然而,


由于


C


原形声明的缘故使它看起来比


实际复杂。< /p>


signal


函数将一个给定的函数和一个特定的信号联系。


这里是


FreeBSD


中的定义

< p>
(


和一个


typedef


一起


):



引用:




typedef void (*sig_t) (int);




sig_t




signal(int sig, sig_t func);




< /p>


第一个参数是目标信号。


func


参数是 一个指针,


指向某个处理该信号的函数。


这个处理信号


函数带有一个


int


型参数,并应返回


void



signal


函数中的


func


参数也可以设定为下面的一


些值:




引用:




SIG_IGN:


如果


func


参数被设置为


SIG_IGN


,该信号将被 忽略。





SIG_DFL:


如果


func


参数被设置为


SIG_DFL


,该信号会按 照确定行为处理。




PS

< p>


sig


信号的可能类型:




#define SIGHUP











1








/* hangup */


SIGHUP


Unix


系统管理员很常用的一个信号。许多后台服务进 程在接受到该信号后将会


重新读取它们的配置文件。


然而,


该信号的实际功能是通知进程它的控制终端被断开。


缺省

< p>
行为是终止进程。






#define SIGINT











2








/* interrupt */


对于


Unix

使用者来说,


SIGINT


是另外一个常用的信号。许多< /p>


shell



CTRL-C


组合使得这


个信号被大家所熟知。该信号的正式名字是中断信号。缺省行为是 终止进程。






#define SIGQUIT










3








/* quit */


SIGQUIT


信号被用于接收


shell



CTRL-/


组合。另外,它还用于告知 进程退出。这是一个


常用信号,用来通知应用程序从容的(译注


:


即在结束前执行一些退出动作)关闭。缺省行


为是终止进程, 并且创建一个核心转储。






#define SIGILL











4








/* illegal instr. (not reset when caught) */

< br>如果正在执行的进程中包含非法指令,操作系统将向该进程发送


SIGILL


信号。如果你的程


序使用了线程,或者


po inter


functions


,那么可能的话可以尝试捕获 该信号来协助调试。



[color=Red]


注意:原文这句为:


“If


your


progr


am


makes


use


of


use


of


threads,


or


pointer


functions, try to catch this signal if possible for aid in debugging .”



中间的两个


use of use of




知是原书排版的瑕疵 还是我确实没有明白其意义;另外,偶经常听说


functions

< br>pointer


,对



poin ter


functions



goo gle


了一下,应该是


fortran


里面的东西,不管怎样,还真不知道,


确切含义还请知道的兄弟斧正。

< br>[/color]


)缺省行为是终止进程,并且创建一个核心转储。






#define SIGTRAP










5








/* trace trap (not reset when caught) */


SIGTRAP


这个信号是 由


POSIX


标准定义的,


用于调试目 的。


当被调试进程接收到该信号时,


就意味着它到达了某一个调 试断点。


一旦这个信号被交付,


被调试的进程就会停止,


并且它


的父进程将接到通知。缺省行为是终止进程,并且创建一个核心 转储。






#define SIGABRT










6








/* abort() */


SI GABRT


提供了一种在异常终止


(abort)


一个进程的同时创建一个核心转储的方法。然而如


果该信号被捕获,并且信号 处理句柄没有返回,那么进程不会终止。缺省行为是终止进程,


并且创建一个核心转储。






#define SIGFPE











8








/* floating point exception */


当进程发生一个浮点错误时,


SIGFPE


信号被发送给该进程。对于那些处理复杂数学运算的


程序,一般会建议你捕获该信号。缺省行为是终止进程,并且创建一个核心转储。





#define SIGKILL










9








/* kill (cannot be caught or ignored) */


SIGKILL


是这些信号中 最难对付的一个。正如你在它旁边的注释中看到的那样,这个信号


不能被捕获或忽略。< /p>


一旦该信号被交付给一个进程,那么这个进程就会终止。然而,会有一

些极少数情况


SIGKILL


不会终止进程。这些罕见的情 形在处理一个



非中断操作



(比如磁



I/O


)的 时候发生。虽然这样的情形极少发生,然而一旦发生的话,会造成进程死锁。唯


一结束进 程的办法就只有重新启动了。缺省行为是终止进程。






#define SIGBUS











10







/* bus error */


如同它的名字暗示的那样,


CPU


检测到数据总线上的错误时将产生


SIGBUS


信号。当程序


尝试去访问一个没有正确对齐的内存地址时就会产生该信号。


缺省行为是终止进程,


并且创


建一个核心转 储。






#define SIGSEGV










11







/* segmentation violation */


SIGSEGV


是另一个


C/C++


程序员很熟悉的信号。当程序没有权利访问一个受保护的内存地


址时,或者访问无效的虚 拟内存地址(脏指针,


dirty


pointers


,译注:由于没有和后备存储


器中内容进行同步而造成。


关于野指针,


可以参见


/wiki/Wild_poi nter



解释。


)时,会产生这个 信号。缺省行为是终止进程,并且创建一个核心转储。





-


-


-


-


-


-


-


-



本文更新与2021-02-11 01:09,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/632998.html

signal函数的使用的相关文章