信號是一種軟件中斷。常駐程序尤爲須要注意處理這些信號,若是沒有處理,同時也沒有了解信號的默認動做,進程可能會莫名其妙的退出或者core。信號早已有之,但在老的操做系統中,可能會出現信號丟失。4.3BSD和SVR3以後增長了可靠信號機制,咱們能夠放心使用信號機制。本文根據閱讀Nginx代碼,參考其信號處理機制,結合本身編碼中的經驗,總結了信號使用方法和注意事項。
#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