Linux支援POSIX標準訊號和實時訊號。下面給出Linux Signal的簡表,詳細細節可以檢視man 7 signal。
預設動作的含義如下:
- 中止程式(Term)
- 忽略訊號(Ign)
- 中止程式並儲存記憶體資訊(Core)
- 停止程式(Stop)
- 繼續執行程式(Cont)
訊號 | 取值 | 預設動作 | 含義(發出訊號的原因) |
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來操作訊號掩碼。在多執行緒程式中,所有執行緒處理一個指定訊號的預設行為都是一樣的。