zoukankan      html  css  js  c++  java
  • shell 移除信号捕获

    本例中用到的trap命令会在每次检测到SIGINT信号时显示一行简单的文本消息。捕获这些信号会阻止用户用bash shell组合键Ctrl+C来停止程序

    code

    macname@MacdeMacBook-Pro Desktop % cat test.sh 
    #!/bin/bash
    # Testing signal trapping
    #
    trap "echo ' Sorry! I have trapped Ctrl-C'" SIGINT
    echo This is a test script
    
    count=1
    while [ $count -le 10 ]
    do
        echo "Loop #$count"
        sleep 1
        count=$[ $count + 1 ]
    done
    #
    echo "This is the end of the test script"
    #%                                                                                                                                                                                              
    macname@MacdeMacBook-Pro Desktop % 
    macname@MacdeMacBook-Pro Desktop % ./test.sh
    This is a test script
    Loop #1
    Loop #2
    ^C Sorry! I have trapped Ctrl-C
    Loop #3
    Loop #4
    Loop #5
    ^C Sorry! I have trapped Ctrl-C
    Loop #6
    Loop #7
    ^C Sorry! I have trapped Ctrl-C
    Loop #8
    Loop #9
    Loop #10
    This is the end of the test script
    macname@MacdeMacBook-Pro Desktop % 

    移除信号捕获后,脚本按照默认行为来处理SIGINT信号,也就是终止脚本运行。但如果信 号是在捕获被移除前接收到的,那么脚本会按照原先trap命令中的设置进行处理。

    macname@MacdeMacBook-Pro Desktop % ./test.sh
    Loop #1
    Loop #2
    Loop #3
    ^C Sorry... Ctrl-C is trapped.
    Loop #4
    Loop #5
    I just removed the trap
    Second Loop #1
    Second Loop #2
    Second Loop #3
    ^C
    macname@MacdeMacBook-Pro Desktop % cat test.sh 
    #!/bin/bash
    # Removing a set trap
    
    trap "echo ' Sorry... Ctrl-C is trapped.'" SIGINT
    count=1
    while [ $count -le 5 ] 
    do
       echo "Loop #$count"
       sleep 1
       count=$[ $count + 1 ]
    done
    #
    # Remove the trap
    trap -- SIGINT
    echo "I just removed the trap"
    count=1
    while [ $count -le 5 ]
    do
       echo "Second Loop #$count"
       sleep 1
       count=$[ $count + 1 ]
    done
    
    macname@MacdeMacBook-Pro Desktop % 

     当脚本运行到正常的退出位置时,捕获就被触发了,shell会执行在trap命令行指定的命令。 如果提前退出脚本,同样能够捕获到EXIT。

    macname@MacdeMacBook-Pro Desktop % ./test.sh
    Loop #1
    Loop #2
    Loop #3
    Loop #4
    Loop #5
    Goodbye...
    macname@MacdeMacBook-Pro Desktop % ./test.sh
    Loop #1
    Loop #2
    ^CGoodbye...
    
    macname@MacdeMacBook-Pro Desktop % cat test.sh 
    #!/bin/bash
    # Trapping the script exit #
    trap "echo Goodbye..." EXIT #
    count=1
    while [ $count -le 5 ]
    do
        echo "Loop #$count"
        sleep 1
        count=$[ $count + 1 ]
    done%                                                                                                                                                                                           
    macname@MacdeMacBook-Pro Desktop % 

  • 相关阅读:
    linux查看电脑温度
    sshd_config详解
    Python Matplotlib包中文显示异常解决方法
    "打开jupyter notebook后找不到安装Anaconda的环境"的解决方法
    [7]力扣每日一题
    UML复习回忆
    [6]力扣每日一题
    [4]力扣每日一题
    [3]力扣每日一题
    mybatis 动态创建表、主键、索引、注释
  • 原文地址:https://www.cnblogs.com/sea-stream/p/14061531.html
Copyright © 2011-2022 走看看