Source From Here
Preface
trap 是一個 shell 內建命令,它用來在腳本中指定信號如何處理。比如,按 Ctrl+C 會使腳本終止執行,實際上系統發送了 SIGINT 信號給腳本進程,SIGINT 信號的默認處理方式就是退出程式。如果要在 Ctrl+C 不退出程式,那麼就得使用 trap 命令來指定一下 SIGINT 的處理方式了。trap 命令不僅僅處理 Linux 信號,還能對腳本退出(EXIT)、調試(DEBUG)、錯誤(ERR)、返回(RETURN)等情況指定處理方式。
常用參數
命令範例
底下針對常用命令使用方式進行介紹.
格式:trap "commands" signals
格式:trap signals
格式:trap "" signals
格式:trap -p
格式:trap -p signal
格式:trap -l
格式:trap "commands" EXIT
格式:trap "commands" DEBUG
格式:trap "commands" ERR
格式:trap "commands" RETURN
信號說明
Linux 支援的信號清單如下。很多信號是與機器的體系結構相關的. 更多說明可以參考 man signal.
Ps. Action 說明: A=Default action is to terminate the process; B=Default action is to ignore the signal; C=Default action is to terminate the process and dump core; D=Default action is to stop the process.
使用示例
示例一
示例二
示例三 在腳本中使用
下面的腳本用於檢查和啟動 java 程式。
第7行:找出正在運行的符合指定特徵的進程;
第11行:如果找到了這樣的進程,就殺掉;
第22行:以後台方式啟動java程式;
第24行:得到剛啟動的程式的pid;
第28行:對SIGTERM信號設置處理方式:結束啟動的java程式;
第30行:等待後台進程結束。
Preface
trap 是一個 shell 內建命令,它用來在腳本中指定信號如何處理。比如,按 Ctrl+C 會使腳本終止執行,實際上系統發送了 SIGINT 信號給腳本進程,SIGINT 信號的默認處理方式就是退出程式。如果要在 Ctrl+C 不退出程式,那麼就得使用 trap 命令來指定一下 SIGINT 的處理方式了。trap 命令不僅僅處理 Linux 信號,還能對腳本退出(EXIT)、調試(DEBUG)、錯誤(ERR)、返回(RETURN)等情況指定處理方式。
常用參數
命令範例
底下針對常用命令使用方式進行介紹.
格式:trap "commands" signals
格式:trap signals
格式:trap "" signals
格式:trap -p
格式:trap -p signal
格式:trap -l
格式:trap "commands" EXIT
格式:trap "commands" DEBUG
格式:trap "commands" ERR
格式:trap "commands" RETURN
信號說明
Linux 支援的信號清單如下。很多信號是與機器的體系結構相關的. 更多說明可以參考 man signal.
Ps. Action 說明: A=Default action is to terminate the process; B=Default action is to ignore the signal; C=Default action is to terminate the process and dump core; D=Default action is to stop the process.
使用示例
示例一
示例二
示例三 在腳本中使用
下面的腳本用於檢查和啟動 java 程式。
第7行:找出正在運行的符合指定特徵的進程;
第11行:如果找到了這樣的進程,就殺掉;
第22行:以後台方式啟動java程式;
第24行:得到剛啟動的程式的pid;
第28行:對SIGTERM信號設置處理方式:結束啟動的java程式;
第30行:等待後台進程結束。
- #!/bin/sh
- #2007.05.06/07
- # 增加了殺掉LAST_PID功能
- # 增加了腳本退出時殺掉THIS_PID功能
- LAST_PID=$(ps -ef|grep 'java.*Zhenjiang'|grep -v grep|awk '{print $2}')
- echo "LAST_PID=$LAST_PID"
- if [ -n "$LAST_PID" ] && [ "$LAST_PID" -gt 0 ]; then
- echo "LAST PROCESS NOT EXIT, NOW KILL IT!"
- kill $LAST_PID
- sleep 1
- fi
- if ! cd ../opt/zhenjiang; then
- echo "CHANGE DIRECTORY FAILED"
- exit 1
- fi
- java -classpath .:./cpinterfaceapi.jar:./log4j-1.2.14.jar:./hyjc.jar:./smj.client.jar Zhenjiang &
- THIS_PID=$!
- echo "THIS_PID=$THIS_PID"
- trap "kill $THIS_PID" TERM
- wait
沒有留言:
張貼留言