当前位置: C语言 -- 标准库 -- <signal.h> -- SIGABRT SIGFPE SIGILL SIGINT SIGSEGV SIGTERM

SIGABRT SIGFPE SIGILL SIGINT SIGSEGV SIGTERM宏


概要:
#define SIGABRT value //value值由具体实现定义。
#define SIGFPE value //value值由具体实现定义。
#define SIGILL value //value值由具体实现定义。
#define SIGINT value //value值由具体实现定义。
#define SIGSEGV value //value值由具体实现定义。
#define SIGTERM value //value值由具体实现定义。

描述:

这些宏会扩展为int类型的不同正值的常量表达式,宏值也是信号编号,每个宏对应的指定条件如下表所示:

对应术语 描述
SIGABRT abort 异常终止,例如:调用abort函数引发的异常终止。
SIGFPE floating-point exception 错误的算术运算,例如:除以0或者导致溢出的运算。
SIGILL illegal instruction 检测到无效函数映像,例如:无效指令。
SIGINT interrupt 收到交互式注意信号。
SIGSEGV segmentation violation 对存储的无效访问。
SIGTERM termination 发送给程序的终止请求。

实现不需要生成上述信号,除非显式调用raise函数。

上述宏是ISO/IEC 9899:2018标准中定义的信号宏,具体实现还可能定义以SIG和一个大写字母或者SIG_和一个大写字母开头的信号宏。完整的信号集、其语义以及默认的处理方式由实现定义;所有信号编号都应为正值。


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
/*宏SIGABRT SIGFPE SIGILL SIGINT SIGSEGV SIGTERM范例*/

#include <signal.h>
#include <stdio.h>

int main(void)
{
    printf("SIGABRT: %d\n", SIGABRT);
    printf("SIGFPE : %d\n", SIGFPE);
    printf("SIGILL : %d\n", SIGILL);
    printf("SIGINT : %d\n", SIGINT);
    printf("SIGSEGV: %d\n", SIGSEGV);
    printf("SIGTERM: %d\n", SIGTERM);

    return 0;
}

输出:

SIGABRT: 22

SIGFPE : 8

SIGILL : 4

SIGINT : 2

SIGSEGV: 11

SIGTERM: 15


GCC编译器<signal.h>头文件中,不同信号的信号值定义如下:

#define  SIGINT    2

#define  SIGILL    4

#define  SIGFPE    8

#define  SIGSEGV   11

#define  SIGTERM   15

#define  SIGBREAK  21

#define  SIGABRT   22