Linux Shell的訊號trap功能細節

haolinhappy發表於2018-09-22

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


第一種:  trap 'commands' signal-list       當指令碼收到signal-list清單內列出的訊號時,trap命令執行雙引號中的命令.


第二種:  trap signal-list trap              不指定任何命令,接受訊號的預設操作.預設操作是結束程式的執行.


第三種:  trap ' ' signal-list trap          命令指定一個空命令串,允許忽視訊號.


NOTE:trap 對同種signal只能相應一種設定,如果在一個shell裡面設定多個trap,那麼它只會響應最後一個訊號設定。

如: trap   ' echo “aaaaaaaaaaa”  '  INT

        trap   ' echo “bbbbbbbbbbb”  '  INT

那麼它只會響應最後一個訊號設定。


如下X/Open規範裡面規定的能夠被捕獲的比較重要的一些訊號(括號裡面的數字是傳統的訊號編號)

trap命令常見的用途在於指令碼程式中斷時完成清理工作,比如臨時檔案等.



trap命令舉例


eg 1:

[root@xyhl ~]# trap "echo aaaaaa" 2
[root@xyhl ~]# ^Caaaaaa   ==》執行ctrl+c,捕獲到訊號2,將執行列印


eg 2:    如果遇到INT中斷,即Ctrl+c,即刪除該檔案


#!/bin/bash

trap 'rm -f /tmp/my_tmp_file_$$' INT

echo "creating file /tmp/my_tmp_file_$$"

date > /tmp/my_tmp_file_$$

echo "press interrupt (CTRL-C) to interrupt ......"


while [ -f /tmp/my_tmp_file_$$ ];

do       echo "File exists"      

           sleep 3

done

echo" we never get here" exit 0


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27785870/viewspace-2214730/,如需轉載,請註明出處,否則將追究法律責任。

相關文章