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也不是终止程序,只是暂停程序而已。

  • 相关阅读:
    MySQL的char和varchar针对空格的处理
    单KEY业务,数据库水平切分架构实践
    接口测试学习笔记1-接口测试的用例设计
    Robot Framework源码解析(2)
    Robot Framework 源码解析(1)
    Python学习笔记1 -- TypeError: 'str' object is not callable
    OKHttp源码学习同步请求和异步请求(二)
    OKHttp源码学习--HttpURLConnection HttpClient OKHttp Get and post Demo用法对比
    Javapoet源码解析
    Universal-Image-Loader源码解解析---display过程 + 获取bitmap过程
  • 原文地址:https://www.cnblogs.com/FengGeBlog/p/10407221.html
Copyright © 2011-2022 走看看