Linux编程之信号
信号是一种软件中断。常驻程序尤其需要注意处理这些信号,如果没有处理,同时也没有了解信号的默认动作,进程可能会莫名其妙的退出或者core。信号早已有之,但在老的操作系统中,可能会出现信号丢失。4.3BSD和SVR3之后增加了可靠信号机制,我们可以放心使用信号机制。本文根据阅读Nginx代码,参考其信号处理机制,结合自己编码中的经验,总结了信号使用方法和注意事项。
备注:
A)POSIX.1包含了ISO C标准函数库,同时结构分类两部分:必须部分和可选部分(X/Open系统接口(X/Open System Interface,XSI))。
B)XSI是POSIX.1中的接口,描述了POSIX中的可选部分。
C)单一UNIX规范(Single UNIX Specification,缩写为SUS),它是一套UNIX系统的统一规格书。SUS是POSIX的扩展,扩充了POSIX标准,定义了标准UNIX操作系统。只有遵循XSI的实现才能称为UNIX系统。
D)SUS、POSIX、ISO C的关系,可以总结为 SUS > POSIX > ISO C。
#define SIGHUP 1
#define SIGINT 2
#define SIGQUIT 3
#define SIGILL 4
#define SIGTRAP 5
#define SIGABRT 6
#define SIGIOT 6
#define SIGBUS 7
#define SIGFPE 8
#define SIGKILL 9
#define SIGUSR1 10
#define SIGSEGV 11
#define SIGUSR2 12
#define SIGPIPE 13
#define SIGALRM 14
#define SIGTERM 15
#define SIGSTKFLT 16
#define SIGCHLD 17
#define SIGCONT 18
#define SIGSTOP 19
#define SIGTSTP 20
#define SIGTTIN 21
#define SIGTTOU 22
#define SIGURG 23
#define SIGXCPU 24
#define SIGXFSZ 25
#define SIGVTALRM 26
#define SIGPROF 27
#define SIGWINCH 28
#define SIGIO 29
#define SIGPOLL SIGIO
#define SIGPWR 30
#define SIGSYS 31
struct sigaction
{
union
{
__sighandler_t _sa_handler;
void (*_sa_sigaction)(int, struct siginfo *, void *);
} _u;
sigset_t sa_mask;
unsigned long sa_flags;
void (*sa_restorer)(void);
};
下表列出了各信号在Linux(2.4.22)环境中代表的意思,以及信号默认动作:| 名字 | 说明 | ISO C | SUS | 默认动作 |
| SIGABRT | 异常终止(abort) | 终止+core | ||
| SIGALRM | 超时(abort) | 终止 | ||
| SIGBUS | 硬件故障 | 终止+core | ||
| SIGCHLD | 子进程状态改变 | 忽略 | ||
| SIGCONT | 使暂停进程继续 | 继续/忽略 | ||
| SIGEMT | 硬件故障 | 终止+core | ||
| SIGFPE | 算术异常 | 终止+core | ||
| SIGHUP | 连接断开 | 终止 | ||
| SIGILL | 非法硬件指令 | 终止+core | ||
| SIGINT | 终端中断符 | 终止 | ||
| SIGIO | 异步I/O | 终止/忽略 | ||
| SIGIOT | 硬件故障 | 终止+core | ||
| SIGKILL | 终止 | 终止 | ||
| SIGPIPE | 写至无读进程的管道 | 终止 | ||
| SIGPOLL | 可轮询事件(POLL) | XSI | 终止 | |
| SIGPROF | 梗概事件超时(setitimer) | XSI | 终止 | |
| SIGPWR | 电源失效/重启动 | 终止/忽略 | ||
| SIGQUIT | 终端退出符 | 终止+core | ||
| SIGSEGV | 无效内存引用 | 终止+core | ||
| SIGSTKFLT | 协处理器故障 | 终止 | ||
| SIGSTOP | 停止 | 暂停进程 | ||
| SIGSYS | 无效系统调用 | XSI | 终止+core | |
| SIGTERM | 终止 | 终止+core | ||
| SIGTRAP | 硬件故障 | XSI | 终止+core | |
| SIGTSTP | 终端停止符 | 暂停进程 | ||
| SIGTTIN | 后台读控制tty | 暂停进程 | ||
| SIGTTOU | 后台写至控制tty | 暂停进程 | ||
| SIGURG | 紧急情况(套接字,带外数据) | 忽略 | ||
| SIGUSR1 | 用户自定义的信号 | 终止 | ||
| SIGUSR2 | 用户自定义的信号 | 终止 | ||
| SIGVTALRM | 虚拟时间闹钟(setitimer) | XSI | 终止 | |
| SIGWINCH | 终端窗口大小改变 | 忽略 | ||
| SIGXCPU | 超过CPU限制(setrlimit) | XSI | 终止+core/忽略 | |
| SIGXFSZ | 超过CPU限制(setrlimit) | XSI | 终止+core/忽略 |
A)POSIX.1包含了ISO C标准函数库,同时结构分类两部分:必须部分和可选部分(X/Open系统接口(X/Open System Interface,XSI))。
B)XSI是POSIX.1中的接口,描述了POSIX中的可选部分。
C)单一UNIX规范(Single UNIX Specification,缩写为SUS),它是一套UNIX系统的统一规格书。SUS是POSIX的扩展,扩充了POSIX标准,定义了标准UNIX操作系统。只有遵循XSI的实现才能称为UNIX系统。
D)SUS、POSIX、ISO C的关系,可以总结为 SUS > POSIX > ISO C。
参考
1)https://blog.csdn.net/Ada_baby/article/details/44487451 
浙公网安备 33010602011771号