標籤:
Linux 訊號表
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來操作訊號掩碼。在多線程程式中,所有線程處理一個指定訊號的預設行為都是一樣的。
<摘錄>linux signal 列表