trap 命令
tarp
命令用於在接收到指定訊號後要執行的動作,通常用途是在shell指令碼被中斷時完成清理工作。例如:
指令碼在執行時按下CTRL+c
時,將顯示"program exit..."並退出(CTRL+c
的訊號是SIGINT)
#!/bin/bash
trap "ehco 'program exit...'; exit 2" SIGINT
....
訊號
常用訊號
訊號名稱 | 訊號數 | 描述 |
---|---|---|
SIGINT | 2 | 程式終止(interrupt)訊號, 在使用者鍵入INTR字元(通常是Ctrl+C)時發出。 |
SIGQUIT | 3 | 和SIGINT類似, 但由QUIT字元(通常是Ctrl /)來控制. 程式在因收到SIGQUIT退出時會產生core檔案, 在這個意義上類似於一個程式錯誤訊號。 |
SIGFPE | 8 | 在發生致命的算術運算錯誤時發出. 不僅包括浮點運算錯誤, 還包括溢位及除數為0等其它所有的算術的錯誤。 |
SIGKILL | 9 | 用來立即結束程式的執行. 本訊號不能被阻塞, 處理和忽略。 |
SIGALRM | 14 | 時鐘定時訊號, 計算的是實際的時間或時鐘時間. alarm函式使用該訊號。 SIGTERM |
捕獲訊號
trap的命令語法:
trap command signal
這裡的
command
可以是linux命令,或使用者定義的函式。signal
是訊號名稱或訊號數,可以指定多個訊號,以空格相隔。trap
在shell常見用途- 指令碼退出前執行命令
指令碼在執行時按下
CTRL+c
時,將顯示"program exit..."並退出(CTRL+c
的訊號是SIGINT)
shell trap "ehco 'program exit...'; exit 2" SIGINT
- 忽略訊號
例:指令碼執行時忽略
SIGINT
SIGQUIT
SIGFPE
等訊號
shell trap '' 2 3 8