美文网首页我爱编程
Bash脚本编程之trap信号捕捉

Bash脚本编程之trap信号捕捉

作者: 小尛酒窝 | 来源:发表于2018-04-11 15:30 被阅读0次

    一、简介

    trap命令是shell的一个内建命令,用于在脚本中指定如何处理对应的信号。比方说,通常脚本接收到系统发送过来的SIGINT信号时,其默认动作为退出进程,但是我们可以使用trap命令指定当脚本接收到SIGINT信号时的动作,而不是单纯执行其默认动作。

    二、trap命令的使用

    1、trap命令的语法

    trap [-lp] [[COMMANDS] signals ...]

    -l:打印当前系统支持的信号;
    -p:打印当前trap的设置;

    2、信号类型
    在linux系统中产生信号的方式大体上可以分为三类:硬件产生、软件产生和键盘输入。其信号类型有62种,在系统中可以通过trap -lkill -l命令来查看当前系统支持的信号类型。

    常用的信号类型包括:
    SIGHUP:这个信号常用于在用户终端连接结束的时候发出,通常是在终端的控制进程结束时,通知该终端下的所有进程终止运行。
    SIGINT:程序终止信号,通过按键Ctrl+C发出该信号,用于通知前台进程组终止进程。
    SIGKILL:用于立即结束进程的运行,这个信号不能被阻塞、处理和忽略,当发现系统中有进程无法终止,可尝试发送这个信号终止进程。

    这里转一个比较详细的signal类型介绍:
    http://www.jb51.net/LINUXjishu/173601.html

    三、使用案例

    • trap信号,退出进程并打印相应的信息:
    #!/bin/bash
    
    trap "echo "quit.";exit 2" 2
    trap -p
    
    for i in {1..20};do
            if [ $i -eq 10 ];then
                    trap 2      #恢复信号的默认动作
            elif [ $i -eq 15 ];then
                    #trap '' 2    #忽略信号的动作,取消注释后,无法使用Ctrl+C中断read命令;
                    read -p "test." test
                    sleep
            fi
            ping -w 1 -c 1 188.88.88.$i &>/dev/null
            result=$?
            if [ $result -ge 0 ];then
                    echo "ping 188.88.88.$i succcess."
            else
                    echo "ping 188.88.88.$i fail."
            fi
    done
    
    [root@localhost tmp]# ./trap.sh 
    trap -- 'echo quit.;exit 2' SIGINT
    ping 188.88.88.1 succcess.
    ping 188.88.88.2 succcess.
    ping 188.88.88.3 succcess.
    ^Cquit.
    
    [root@localhost tmp]# ./trap.sh 
    trap -- 'echo quit.;exit 2' SIGINT
    ping 188.88.88.1 succcess.
    ping 188.88.88.2 succcess.
    ping 188.88.88.3 succcess.
    ping 188.88.88.4 succcess.
    ping 188.88.88.5 succcess.
    ping 188.88.88.6 succcess.
    ping 188.88.88.7 succcess.
    ping 188.88.88.8 succcess.
    ping 188.88.88.9 succcess.
    ping 188.88.88.10 succcess.
    ping 188.88.88.11 succcess.
    ^Cping 188.88.88.12 succcess.
    ping 188.88.88.13 succcess.
    ^Cping 188.88.88.14 succcess.
    
    

    相关文章

      网友评论

        本文标题:Bash脚本编程之trap信号捕捉

        本文链接:https://www.haomeiwen.com/subject/flrnhftx.html