trap 讓 Shell 腳本能捕捉並自訂回應系統信號(如 SIGINT, SIGTERM),是撰寫健壯腳本的關鍵。三種基本形式對應不同處理策略:
trap "commands" signal-list
收到列表中信號時執行雙引號內指令。典型用途:清理暫存檔、釋放鎖、記錄狀態、優雅關閉連線。
trap "rm -f /tmp/mylock; echo 'Script interrupted'; exit 1" INT TERM
trap signal-list
不指定指令串,讓腳本對信號採用系統預設動作(通常是終止進程)。用於覆蓋先前設定的自訂處理。
trap "" signal-list
指令串為空字串,腳本將忽略指定信號繼續執行。慎用,可能導致腳本無法被正常中斷。
| 信號 | 編號 | 來源/含義 | 預設動作 |
|---|---|---|---|
| SIGHUP | 1 | 終端機掛斷/控制進程終止 | 終止 |
| SIGINT | 2 | 鍵盤中斷 | 終止 |
| SIGQUIT | 3 | 鍵盤退出 | 核心傾印並終止 |
| SIGTERM | 15 | 軟體終止請求 | 終止 |
trap -l 可列出所有信號名稱與編號。