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

  • 相关阅读:
    版本控制 version control
    URL URI
    能用上的收藏
    函数式语言简介(functional language)
    h5触摸事件-判断上下滑动
    地理定位
    web存储
    jquerymobile tap事件被触发两次
    关于button的onclientclick事件和onclick事件
    .net 后台给html控件赋值
  • 原文地址:https://www.cnblogs.com/FengGeBlog/p/10407221.html
Copyright © 2011-2022 走看看