Linux支持POSIX標準信號和實時信號。下面給出Linux Signal的簡表,詳細細節可以查看man 7 signal。
默認動作的含義如下:
Term 終止進程
信號 | 取值 | 默認動作 | 含義(發出信號的原因) |
SIGHUP | 1 | Term | 終端的掛斷或進程死亡 |
SIGINT | 2 | Term | 來自鍵盤的中斷信號 |
SIGQUIT | 3 | Core | 來自鍵盤的離開信號 |
SIGILL | 4 | Core | 非法指令 |
SIGABRT | 6 | Core | 來自abort的異常信號 |
SIGFPE | 8 | Core | 浮點例外 |
SIGKILL | 9 | Term | 殺死 |
SIGSEGV | 11 | Core | 段非法錯誤(內存引用無效) |
SIGPIPE | 13 | Term | 管道損壞:向一個沒有讀進程的管道寫數據 |
SIGALRM | 14 | Term | 來自alarm的計時器到時信號 |
SIGTERM | 15 | Term | 終止 |
SIGUSR1 | 30,10,16 | Term | 用戶自定義信號1 |
SIGUSR2 | 31,12,17 | Term | 用戶自定義信號2 |
SIGCHLD | 20,17,18 | Ign | 子進程停止或終止 |
SIGCONT | 19,18,25 | Cont | 如果停止,繼續執行 |
SIGSTOP | 17,19,23 | Stop | 非來自終端的停止信號 |
SIGTSTP | 18,20,24 | Stop | 來自終端的停止信號 |
SIGTTIN | 21,21,26 | Stop | 後臺進程讀終端 |
SIGTTOU | 22,22,27 | Stop | 後臺進程寫終端 |
SIGBUS | 10,7,10 | Core | 總線錯誤(內存訪問錯誤) |
SIGPOLL | Term | Pollable事件發生(Sys V),與SIGIO同義 | |
SIGPROF | 27,27,29 | Term | 統計分佈圖用計時器到時 |
SIGSYS | 12,-,12 | Core | 非法系統調用(SVr4) |
SIGTRAP | 5 | Core | 跟蹤/斷點自陷 |
SIGURG | 16,23,21 | Ign | socket緊急信號(4.2BSD) |
SIGVTALRM | 26,26,28 | Term | 虛擬計時器到時(4.2BSD) |
SIGXCPU | 24,24,30 | Core | 超過CPU時限(4.2BSD) |
SIGXFSZ | 25,25,31 | Core | 超過文件長度限制(4.2BSD) |
SIGIOT | 6 | Core | IOT自陷,與SIGABRT同義 |
SIGEMT | 7,-,7 | Term | |
SIGSTKFLT | -,16,- | Term | 協處理器堆棧錯誤(不使用) |
SIGIO | 23,29,22 | Term | 描述符上可以進行I/O操作 |
SIGCLD | -,-,18 | Ign | 與SIGCHLD同義 |
SIGPWR | 29,30,19 | Term | 電力故障(System V) |
SIGINFO | 29,-,- | 與SIGPWR同義 | |
SIGLOST | -,-,- | Term | 文件鎖丟失 |
SIGWINCH | 28,28,20 | Ign | 窗口大小改變(4.3BSD, Sun) |
SIGUNUSED | -,31,- | Term | 未使用信號(will be SIGSYS) |
說明:
一些信號的取值是硬件結構相關的(一般alpha和sparc架構用第一個值,i386、ppc和sh架構用中間值,mips架構用第三個值, - 表示相應架構的取值未知)。
藍色的是POSIX.1-1990標準信號。
SIGKILL和SIGSTOP信號不能被掛鉤、阻塞或忽略。
青色的是SUSv2和POSIX.1-2001定義的信號。
在Linux 2.2(包括)內核之前,SIGSYS、SIGXCPU、SIGXFSZ和SIGBUS (SPARC和MIPS架構除外)的默認動作是終止進程,但沒有core dump。Linux 2.4遵循POSIX.1-2001要求,這些信號的默認動作改爲:終止進程同時做core dump。
橙色的是其他常見的信號。
信號29在Alpha上爲SIGINFO / SIGPWR ,在Sparc上爲SIGLOST。
SIGEMT沒有在POSIX.1-2001中說明,但是在大多數的Unices中仍然能見到,典型的默認動作是終止進程並做core dump。
SIGPWR沒有在POSIX.1-2001中說明,在使用它的一些Unices中典型的默認動作是忽略。
SIGIO沒有在POSIX.1-2001中說明,在使用它的一些Unices中典型的默認動作是忽略。
進程可以通過使用sigaction和signal系統調用來改變信號的默認處理方式(使用signal的可移植性差)。進程可以選擇下列3種信號處理方式中的一種:
1、執行默認操作;
2、忽略該信號;
3、捕獲該信號,但是通過信號句柄來調用自定義的處理函數。
信號可能被阻塞。進程中的每個線程擁有獨立的信號掩碼,用來表示本線程的信號被阻塞。線程通過pthread_sigmask來設置它的信號掩碼。單線程程序可以用sigprocmask來操作信號掩碼。在多線程程序中,所有線程處理一個指定信號的默認行爲都是一樣的。