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)trap "ehco 'program exit...'; exit 2" SIGINT
- 忽略信號
例:腳本運行時忽略
SIGINT
SIGQUIT
SIGFPE
等信號trap '' 2 3 8