zoukankan      html  css  js  c++  java
  • Linux Shell脚本编程-信号捕获

    bash编程的信号捕获:
      kill -l 显示当前系统可用信号(trap -l)
      获取帮助:man 7 single

      常用信号:
      1) SIGHUP  无须重启进程而让其重读配置文件
      2) SIGINT  中断正在运行的进程;相当于Ctrl+c
      9) SIGKILL  强制杀死正在运行的进程(直接关闭进程)
      15) SIGTERM 正常方式终止正在运行的进程(会关闭进程打开的文件等再终止进程)
      18) SIGCONT 让后台停止的进程继续在后台运行,相当于bg命令
      19) SIGSTOP 将前台进程转入后台并停止运行,相当于Ctrl+Z
      指定信号的方法:
      信号的数字标识:1、2、9
      信号完整名称:SIGHUP
      信号的简写名称:HUP

      捕获到某种信号,执行相关操作,如果操作复杂可以写成函数在调用函数
     语法:trap 'COMMAND' SIGNAL

      信号捕捉用于:在中止某个正在执行的脚本时,做一些清理操作(KILL信号是无法捕捉)
    示例1:ping命令在脚本中Ctrl+C不能终止,用信号捕获到SIGINT信号就打印退出信息和退出脚本
    #!/bin/bash
    #捕获到SIGINT信号(按Ctrl+C时),就输出"quit"同时执行"exit 5"退出脚本
    trap 'echo "quit"; exit 5' SIGINT
    for i in {1..254}; do
      if ping -w 1 -c 1 172.16.254.$i &> /dev/null; then
        echo "172.16.254.$i is up."
      else
        echo "172.16.254.$i is down."
      fi
    done

    示例2:在接收到INT信号时,因为命令还没有结束,但是又想把命令产生的文件删除,则可以定义一个函数,在使用 trap 命令时直接调用函数即可
    #!/bin/bash
    #
    mytrp() {
      echo "Quit"
      rm -f ${hostmpfiles[*]}
      exit 1
    }

    declare -a hosmpfiles
    trap 'mytrp' INT

    for i in {100..250};do
      tmpfile=$(mktemp /tmp/ping.XXXXXX)
      if ping -c1 -W1 192.168.1.$i &> /dev/null; then
        echo "192.168.1.$i is up" |tee $tmpfile
      else
        echo "192.168.1.$i is down" |tee $tmpfile
      fi
      hostmpfiles[${#hostmpfiles[*]}]=$tmpfile
    done

    rm -f ${hostmpfiles[*]}

  • 相关阅读:
    偷窃转基因玉米种子引发中美打农业官司
    关于PreferenceActivity的使用和一些问题的解决(自己定义Title和取值)
    大写中文数字-財务
    【leetcode】LRU
    【AC大牛陈鸿的ACM总结贴】【ID AekdyCoin】人家当初也一样是菜鸟
    android面试题 不单单为了面试也是一次非常好的学习
    存储系统的实现-探析存储的机制和原理
    unity3d脚本编程
    ubuntu12.04 安装配置jdk1.7
    Android中一个类实现的接口数不能超过七个
  • 原文地址:https://www.cnblogs.com/Link-Luck/p/9855274.html
Copyright © 2011-2022 走看看