基本介紹
- 中文名:SIGFPE
- 分類:Unix信號
- 領域:信息科學
語源,描述,例子,
語源
SIG是信號名的通用前綴。FPE是floating-point exception(浮點異常)的首字母縮略字。產生SIGFPE信號時並非一定要涉及浮點算術,之所以不修改名字是因為這么做會破壞向下兼容性。
描述
SIGFPE可以被處理。也就是說,程式設計師可以指定他們在接收到信號時想要的動作,例如調用一個子程式,忽略事件等。
在特定情形下,忽略SIGFPE可能導致程式出現意料之外的行為,包括但不限於由於不斷重試違規操作而導致程式掛起。但是,忽略並非由計算造成的SIGFPE信號是安全的,例如通過kill系統調用傳送的那些。
一個通常的疏忽是認為除以零是SIGFPE的唯一來源。在一些架構上(包括IA-32[來源請求]),使用INT_MIN(最小的可以被表示的負整數值)除以-1的整數除法也會觸發這個信號,因為商是一個無法被表示的正數。(比如8位有符號整數可以表示-128、+127和它們之間的整數。-128÷-1=+128 > +127,因此無法被表示而產生溢出並觸發此信號)
例子
int main(){ int x = 42/0; return 0; /* Never reached */}
$ 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 ()