trap命令的實戰用法


trap命令:

  trap命令是專用於捕捉信號的。比如像ctrl+c發送給終端的中斷信號等等。在捕捉到信號之后,可以進行一系列的操作。

  用法:trap  'COMMAND' INT           

    COMMAND表示trap命令接收到INT信號后要執行的動作什么。

  可以捕捉的信號有:HUP  INT等

  不適用捕捉的信號:KILL   TERM

使用trap -l命令可以查看信號有哪些:

[root@ELK-chaofeng test]# trap -l
 1) SIGHUP     2) SIGINT     3) SIGQUIT     4) SIGILL     5) SIGTRAP
 6) SIGABRT     7) SIGBUS     8) SIGFPE     9) SIGKILL    10) SIGUSR1
11) SIGSEGV    12) SIGUSR2    13) SIGPIPE    14) SIGALRM    15) SIGTERM
16) SIGSTKFLT    17) SIGCHLD    18) SIGCONT    19) SIGSTOP    20) SIGTSTP
21) SIGTTIN    22) SIGTTOU    23) SIGURG    24) SIGXCPU    25) SIGXFSZ
26) SIGVTALRM    27) SIGPROF    28) SIGWINCH    29) SIGIO    30) SIGPWR
31) SIGSYS    34) SIGRTMIN    35) SIGRTMIN+1    36) SIGRTMIN+2    37) SIGRTMIN+3
38) SIGRTMIN+4    39) SIGRTMIN+5    40) SIGRTMIN+6    41) SIGRTMIN+7    42) SIGRTMIN+8
43) SIGRTMIN+9    44) SIGRTMIN+10    45) SIGRTMIN+11    46) SIGRTMIN+12    47) SIGRTMIN+13
48) SIGRTMIN+14    49) SIGRTMIN+15    50) SIGRTMAX-14    51) SIGRTMAX-13    52) SIGRTMAX-12
53) SIGRTMAX-11    54) SIGRTMAX-10    55) SIGRTMAX-9    56) SIGRTMAX-8    57) SIGRTMAX-7
58) SIGRTMAX-6    59) SIGRTMAX-5    60) SIGRTMAX-4    61) SIGRTMAX-3    62) SIGRTMAX-2
63) SIGRTMAX-1    64) SIGRTMAX    

案例演示:

[root@ELK-chaofeng test]# cat test11.sh 
#!/bin/bash
#
declare -a hosttmpfiles
trap 'mytrap' INT

mytrap(){
    echo "Now,you are doing the QUIT"
    rm -rf ${hosttmpfiles[@]}
    exit 1
}

for i in {1..50};do
    tmpfile=$(mktemp /tmp/ping.XXXXXX)
    if ping -W1 -c 1 192.168.$i.1 &> /dev/null;then
        echo  "192.168.$i.1 is up" | tee $tmpfile
    else
        echo "192.168.$i.1 is down" | tee $tmpfile
    fi
    hosttmpfiles[${#hosttmpfiles[*]}]=$tmpfile
done
rm -rf ${hosttmpfiles[@]}

效果:

這個例子中,trap命令的執行語句是調用一個函數,然后函數內執行退出動作。trap命令后面的INT都可以換,在trap -l命令中也說明了可以換的信號。但是我們要知道自己准確無誤的發送信號。比如將INT換成STOP(19)之后,再次運行腳本時按下ctrl+c組合鍵是不管用的。因為發送的信號不對應,trap命令不能執行。

 我們可以這樣子看效果:

那接下來我修改一下程序:

 我將上面的shell腳本中的trap命令后面跟的接收信號的類型修改成STOP(19)。

看一下效果:

 其實最后這個STOP也不是終止程序,只是暫停程序而已。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM