Linux編程之信號

信號是一種軟件中斷。常駐程序尤爲須要注意處理這些信號,若是沒有處理,同時也沒有了解信號的默認動做,進程可能會莫名其妙的退出或者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
相關文章
相關標籤/搜索