Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux 信號機制深度入門:從核心原理到實戰應用

編輯:關於 Linux

信號 是 Linux 進程間通信 (IPC) 中最古老、最基礎,也是系統管理與編程必須掌握的核心機制。它像系統發給進程的「緊急通知」,雖然攜帶信息量極小(僅一個整數),卻能觸發進程終止、暫停、恢復等關鍵行為。本文從概念模型、生命週期、常見信號、Shell 實戰四個維度,構建完整認知體系。

一、核心模型:大樓、房間與小紙條

  • 內核 = 大樓管理員
  • 進程 = 獨立房客,擁有私有內存空間(房間),互不干擾
  • 信號 = 管理員塞進信箱的小紙條(整數),進程稍後取出處理

這種異步通知機制打破了進程隔離,讓內核或其他進程能異步干預目標進程行為。

二、信號生命週期:生成 → 等待 → 傳遞 → 處理

  1. 生成:內核(硬件異常、定時器)或進程(kill()、raise())向目標進程 PCB 中的信號集合設置標誌位。
  2. 等待:信號處於 Pending 狀態,直到進程下次從內核態返回用戶態(系統調用結束、中斷返回、調度點)時檢查。
  3. 傳遞:內核將信號從 Pending 移除,強制進程執行對應處理動作。
  4. 處理:三種處置:
    • 忽略:直接丟棄(除 SIGKILL/SIGSTOP 外)。
    • 默認:內核預定義動作(Term/Stop/Core/Ignore)。
    • 捕獲:執行用戶註冊的信號處理函數(signal()/sigaction())。

阻塞:進程可調用 sigprocmask() 將特定信號加入阻塞集,使其持續處於 Pending 狀態,直到解除阻塞。

三、常見信號速查表

信號值來源/觸發鍵默認動作典型用途
SIGHUP1終端掛斷/控制進程退出Term通知守護進程重讀配置
SIGINT2Ctrl+CTerm終止前台作業
SIGQUIT3Ctrl+\Core強制退出並生成核心轉儲
SIGKILL9kill -9Term不可捕獲/忽略/阻塞,強制殺進程
SIGTERM15kill (默認)Term優雅關閉,可捕獲做清理
SIGSTOP19Ctrl+Z (內核)Stop不可捕獲,暫停進程
SIGTSTP20Ctrl+Z (Shell)Stop可捕獲,交互式暫停
SIGCONT18fg/bg/kill -CONTCont恢復暫停進程
SIGCHLD17子進程結束Ignore父進程回收僵屍進程
SIGALRM14alarm()/setitimer()Term定時器超時通知
SIGPIPE13寫無讀端管道Term管道/網絡連接斷開

查看完整列表:man 7 signal 或 kill -l。

四、Shell 實戰:信號與作業控制

1. 鍵盤產生信號

$ ping localhost
# 按 Ctrl+Z 發送 SIGTSTP
[1]+  Stopped                 ping localhost

$ ps -o pid,stat,cmd -C ping
  PID STAT CMD
27397 T    ping localhost  # T 表示 Stopped (traced or stopped)

$ kill -SIGCONT 27397  # 或 fg %1 / bg %1
$ ping localhost  # 繼續運行

2. kill 命令發送任意信號

kill -l              # 列出所有信號名/編號
kill -SIGTERM 1234   # 按名稱發送
kill -15 1234        # 按編號發送
kill -9 1234         # 強制殺死 (SIGKILL)
kill -0 1234         # 僅檢測進程是否存在/可發信號

3. 信號處理腳本範例

#!/bin/bash
# trap_demo.sh
cleanup() {
    echo "捕獲信號,執行清理..."
    rm -f /tmp/temp_$$
    exit 0
}
trap cleanup SIGINT SIGTERM SIGHUP

echo "PID: $$,運行中... 按 Ctrl+C 測試"
while true; do sleep 1; done

五、總結

信號機制四大狀態:Generate → Pending → Deliver → Handle;三大處置:Ignore / Default / Catch。掌握 kill、trap、Ctrl+C/Z/\ 實戰操作,理解 SIGKILL/SIGSTOP 不可捕獲特性,是 Linux 系統管理與後端開發的必修課。

Linux 信號機制示意圖

Copyright © Windows教程網 All Rights Reserved