trap命令 在指令碼中處理訊號

2021-07-09 12:13:39 字數 1062 閱讀 7167

trap是乙個shell內建命令,用於指定在接收到訊號後將要採取的動作,常見的用途是在指令碼程式被中斷時完成清理工作。比如,按ctrl+c會使指令碼終止執行,實際上系統傳送了sigint訊號給指令碼程序,sigint訊號的預設處理方式就是退出程式。如果要在ctrl+c不退出程式,那麼就得使用trap命令來指定一下sigint的處理方式了。trap命令不僅僅處理linux訊號,還能對指令碼退出(exit)、除錯(debug)、錯誤(err)、返回(return)等情況指定處理方式。

trap命令的引數分為兩部分,前一部分是接收到指定訊號時將要採取的行動,後一部分是要處理的訊號名。

trap command signal

它有三種形式分別對應三種不同的訊號回應方式。

第一種:

trap "commands" signal-list

當指令碼收到signal-list清單內列出的訊號時,trap命令執行雙引號中的命令。

第二種:

trap signal-list

trap不指定任何命令,或者是 "-" ,接受訊號的預設操作,預設操作是結束程序的執行。

第三種:

trap " " signal-list

trap命令指定乙個空命令串,允許忽視訊號,我們用到的就是這一種。

如果要重置某個訊號的處理條件到其預設值,只需簡單的將command設定為-或者留空。如果要忽略某個訊號,就把command設定為空字串 ""。乙個不帶引數的trap命令將列出當前設定的訊號及其行動的清單。

※ 指令碼程式通常是以從上到下的順序解釋執行的,所以必須在你想保護的那部分**以前指定trap命令。

例:trap "echo no way" 1 2 3 9

指定了命令,如果遇到 hup int quit kill 訊號,則執行 echo no way 命令

trap -p

顯示當前trap設定

trap "" int quit

遇到 int 和 quit 訊號,則忽略,什麼也不做

trap 1 2 3 9 

沒有指定命令部分,恢復 hup int quit kill 這些訊號設定;

more: 

在shell中捕捉訊號的trap命令

1 執行一段程式來處理這一訊號 2 接受訊號的預設操作 3 忽視這一訊號 二.trap對上面三種方式提供了三種基本形式 第一種形式的trap命令在shell接收到signal list清單中數值相同的訊號時,將執行雙 引號中的命令串。trap commands signal list trap co...

在SHELL中捕捉訊號的TRAP命令

一.trap捕捉到訊號之後,可以有三種反應方式 1 執行一段程式來處理這一訊號 2 接受訊號的預設操作 3 忽視這一訊號 二.trap對上面三種方式提供了三種基本形式 第一種形式的trap命令在shell接收到signal list清單中數值相同的訊號時,將執行雙 引號中的命令串。trap comm...

shell 使用命令trap來捕捉訊號

一.trap捕捉到訊號之後,可以有三種反應方式 1 執行一段程式來處理這一訊號 2 接受訊號的預設操作 3 忽視這一訊號 二.trap對上面三種方式提供了三種基本形式 第一種形式的trap命令在shell接收到signal list清單中數值相同的訊號時,將執行雙 引號中的命令串。trap comm...