在POSIX兼容的平台上,SIGFPE是当一个进程执行了一个错误的算术操作时发送给它的信号。SIGFPE的符号常量在头文件signal.h
中定义。因为在不同平台上,信号数字可能变化,因此常使用信号名称。
是信号名的通用前缀。是(浮点异常)的首字母缩略字。产生SIGFPE信号时并非一定要涉及浮点算术,之所以不修改名字是因为这么做会破坏向下兼容性。
导致SIGFPE被发送给进程的原因有很多。一个常见的例子是由于一个意外输入导致的溢出,或者在程序构造中的错误。
SIGFPE可以被处理。也就是说,程序员可以指定他们在接收到信号时想要的动作,例如调用一个子程序,忽略事件等。
在特定情形下,忽略SIGFPE可能导致程序出现意料之外的行为,包括但不限于由于不断重试违规操作而导致程序挂起。但是,忽略并非由计算造成的SIGFPE信号是安全的,例如通过kill
系统调用发送的那些。
一个通常的疏忽是认为除以零是SIGFPE的唯一来源。在一些架构上(包括IA-32),使用INT_MIN(最小的可以被表示的负整数值)除以-1的整数除法也会触发这个信号,因为商是一个无法被表示的正数。(比如8位有符号整数可以表示-128、+127和它们之间的整数。-128÷-1=+128 > +127,因此无法被表示而产生溢出并触发此信号)
这是一个尝试执行一个称为整数除以零,或的错误算术运算的ANSI C程序的例子。
int main(){ int x = 42/0; return 0; /* Never reached */}
在一个运行Linux的IA-32上编译运行,产生下列内容:
$ gcc -o sigfpe sigfpe.csigfpe.c: In function ‘main’:sigfpe.c:3: warning: division by zero$ ./sigfpeFloating point exception (core dumped)
一个来自gdb的栈跟踪显示在main
函数中发生了SIGFPE信号:
Program received signal SIGFPE, Arithmetic exception.0x08048373 in main ()
参考
- ^ sourceware.org Git - glibc.git/blob - bits/signum.h. 2001-07-06 .
参阅
计算机信号 |
---|
| POSIX | SIGABRT · SIGALRM · SIGFPE · SIGHUP · SIGILL · SIGINT · SIGKILL · SIGPIPE · SIGQUIT · SIGSEGV · SIGTERM · SIGUSR1 · SIGUSR2 · SIGCHLD · SIGCONT · SIGSTOP · SIGTSTP · SIGTTIN(英语:SIGTTIN) · SIGTTOU · SIGBUS · SIGPOLL · SIGPROF · SIGSYS · SIGTRAP · SIGURG(英语:SIGURG) · SIGVTALRM · SIGXCPU · SIGXFSZ · SIGIOT · SIGEMT · SIGSTKFLT · SIGIO · SIGCLD · SIGINFO · SIGPWR · SIGLOST · SIGWINCH · SIGUNUSED
相关- 二磷酸尿苷二磷酸尿苷(Uridine diphosphate,缩写UDP)是一种核苷酸,是由焦磷酸(pyrophosphate)官能基加上五碳核糖及碱基尿嘧啶。
- 格哈特·霍普特曼格哈特·约翰内斯·罗伯特·霍普特曼(Gerhart Johann Robert Hauptmann,1862年11月15日-1946年6月6日),德国剧作家和诗人,自然主义文学在德国的重要代表人,同时也具有其他写作风格,1
- 居量反转居量反转(英语:Population inversion),又译为群数反转、密数反转、粒子数反转、反转分布,为一个物理学名词,在统计力学中经常被使用。居量反转即在一个系统(例如一群原子或分子)中,处
- 梭形纺锤形(Fusiform;源于希腊文的fusu,即纺锤(英语:Spindle (textiles))的意思),又译作梭形,是一种两端尖细、中间宽阔膨凸的形状。这种形状常于形容细胞、腹足纲软体动物的螺壳、又或鱼
- 崇仁县崇仁县是中国江西省抚州市所辖的一个县。总面积为1520平方公里,2012年人口为36万。基本上为江右民系,通用抚州赣语。隋朝置县。崇仁县下辖7个镇8个乡。巴山镇、相山镇、航埠镇
- 英国电影学院奖最佳女主角英国电影学院奖最佳女主角(BAFTA Award for Best Actress in a Leading Role)是英国电影学院奖的奖项,颁发给前一年度电影类表现最佳的女演员,于1952年开始颁发。1952年—1967年
- 双缩脲试剂双缩脲试剂(英语:Biuret reagent)是一个用于鉴定蛋白质的分析化学试剂。它是一个碱性的含铜试液,呈蓝色,由1%氢氧化钾、几滴1%硫酸铜和酒石酸钾钠配制。当底物中含有肽键时(多肽),试
- 克拉丽丝·菲尔斯克拉丽丝·菲尔斯(Clarice E. Phelps)是美国科学家,在橡树岭国家实验室工作,她参与了发现了117号化学元素鿬(Ts)的跨团队计划中。克拉丽丝在橡树岭实验室中是负责同位素产业应用的
- 爆裂鼓手《爆裂鼓手》(英语:)是一部于2014年上映的美国剧情片,由达米恩·查泽雷自编自导,迈尔斯·特勒、J·K·西蒙斯与保罗·莱瑟等人主演。该片讲述一名胸怀壮志的鼓手安德鲁·奈曼(Andr
- 青年 (国歌)《青年》(意大利语:Giovinezza)是意大利国家法西斯党的党歌,在1943-1945年期间作为意大利社会共和国的国歌。墨索里尼担任意大利王国首相时期,这首歌有时会在王宫中演奏,并被作为非
|
---|
|