Linux普通信號總表(1-31)??
?編號? | ?信號名? | ?觸發原因? | ?默認動作? |
---|---|---|---|
1 | SIGHUP | 終端連接斷開(如SSH會話終止)或守護進程重載配置(如nginx -s reload ) | 終止進程 |
2 | SIGINT | 用戶輸入Ctrl+C 中斷前臺進程 | 終止進程 |
3 | SIGQUIT | 用戶輸入Ctrl+\ 退出進程 | 終止并生成core文件 |
4 | SIGILL | 執行非法CPU指令(如不支持的指令集) | 終止并生成core文件 |
5 | SIGTRAP | 調試斷點或陷阱指令觸發(由GDB等調試器使用) | 終止并生成core文件 |
6 | SIGABRT | 調用abort() 函數或斷言失敗(如assert() ) | 終止并生成core文件 |
7 | SIGBUS | 內存對齊錯誤(如訪問非對齊地址) | 終止并生成core文件 |
8 | SIGFPE | 算術異常(如除零、浮點溢出) | 終止并生成core文件 |
9 | SIGKILL | kill -9 強制終止進程(不可被捕獲、阻塞或忽略) | 立即終止 |
10 | SIGUSR1 | 用戶自定義信號1(需程序主動處理) | 終止進程 |
11 | SIGSEGV | 非法內存訪問(如空指針解引用、緩沖區溢出) | 終止并生成core文件 |
12 | SIGUSR2 | 用戶自定義信號2 | 終止進程 |
13 | SIGPIPE | 向無讀端的管道或Socket寫入數據(如網絡連接斷開后繼續發送) | 終止進程 |
14 | SIGALRM | 定時器到期(由alarm() 或setitimer() 設置) | 終止進程 |
15 | SIGTERM | 默認終止信號(kill 不加參數時發送),允許進程清理資源 | 終止進程 |
16 | SIGSTKFLT | 協處理器棧錯誤(現代Linux中極少使用) | 終止進程 |
17 | SIGCHLD | 子進程終止或停止時通知父進程(默認忽略,需主動回收僵尸進程) | 忽略 |
18 | SIGCONT | 恢復被暫停的進程(如fg 命令) | 繼續執行 |
19 | SIGSTOP | 暫停進程(不可被捕獲、阻塞或忽略,Ctrl+Z 實際觸發SIGTSTP ) | 停止進程 |
20 | SIGTSTP | 終端暫停信號(Ctrl+Z ) | 停止進程 |
21 | SIGTTIN | 后臺進程嘗試讀取終端輸入 | 停止進程 |
22 | SIGTTOU | 后臺進程嘗試向終端輸出 | 停止進程 |
23 | SIGURG | Socket收到帶外數據(OOB) | 忽略 |
24 | SIGXCPU | 進程CPU時間超限(由setrlimit() 設置) | 終止并生成core文件 |
25 | SIGXFSZ | 文件大小超限(如寫入超過ulimit 限制) | 終止并生成core文件 |
26 | SIGVTALRM | 虛擬計時器到期(統計進程占用CPU時間) | 終止進程 |
27 | SIGPROF | 性能分析計時器到期(統計CPU及系統調用時間) | 終止進程 |
28 | SIGWINCH | 終端窗口大小變化(如調整xterm窗口) | 忽略 |
29 | SIGIO | 異步I/O事件就緒(需配合fcntl() 設置) | 終止進程 |
30 | SIGPWR | 電源故障(由UPS或系統監控進程發送) | 終止進程 |
31 | SIGSYS | 無效系統調用(如調用不存在的syscall) | 終止并生成core文件 |
?關鍵特性說明?
-
?不可攔截信號?:
SIGKILL
(9)和SIGSTOP
(19)?無法被捕獲、阻塞或忽略?,是系統強制控制進程的終極手段。 -
?核心轉儲(Core Dump)??:
信號如SIGSEGV
、SIGABRT
觸發時默認生成core文件(需系統配置允許),用于事后調試定位崩潰原因 -
?進程控制信號組?:
- ?停止進程?:
SIGSTOP
、SIGTSTP
、SIGTTIN
、SIGTTOU
- ?恢復進程?:
SIGCONT
- ?停止進程?:
-
?用戶自定義信號?:
SIGUSR1
(10)和SIGUSR2
(12)無預設行為,需程序主動注冊處理函數以實現自定義邏輯(如熱重載配置) -
?異步安全警告?:
信號處理函數(Handler)中只能調用異步信號安全函數?(如write()
、_exit()
),避免使用malloc()
或printf()
等非安全函數
?常見應用場景?
- ?服務優雅退出?:捕獲
SIGTERM
(15)釋放資源后退出 - ?子進程回收?:處理
SIGCHLD
(17)避免僵尸進程 - ?調試定位崩潰?:分析
SIGSEGV
(11)生成的core文件 - ?定時任務控制?:通過
SIGALRM
(14)實現超時機制