zoukankan      html  css  js  c++  java
  • 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也不是终止程序,只是暂停程序而已。

  • 相关阅读:
    我的未来。
    我的的第一篇博客
    从软件工程角度回顾本科毕业论文
    从高级软件工程角度分析毕业设计-小结-盛超
    从软件工程视角,回顾分析本科毕业设计软件中存在的不足问题
    从软件工程的角度分析本科毕业设计
    从高级软件工程角度分析本科毕业设计
    从软件工程的视角,回顾本科毕业设计,探视设计中存在的不足
    用软件工程思想看毕业设计
    从软件工程角度分析毕业设计
  • 原文地址:https://www.cnblogs.com/FengGeBlog/p/10407221.html
Copyright © 2011-2022 走看看