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[*]}

最新文章

  1. 初识【Windows API】--文本去重
  2. ssh远程执行目标机器上的命令
  3. android setting 设置永不休眠
  4. 两款较好的Web前端性能测试工具
  5. Spring 操作数据库
  6. 简单的网页布局效果html5+CSS3
  7. div+css不间断滚动字幕
  8. zlog使用手册,小靠谱啊
  9. BZOJ 1652: [Usaco2006 Feb]Treats for the Cows
  10. JAVA学习篇--JAVA两种编程模式控制
  11. apigateway-kong(一)简介及部署
  12. React 精要面试题讲解(五) 高阶组件真解
  13. PHP常见错误级别及错误码
  14. 从零开始学 Web 之 CSS3(七)多列布局,伸缩布局
  15. django自定制Admin
  16. java倒计时使用java.util.Timer实现,使用两个线程,以秒为单位
  17. django -----分页器组件
  18. tomcat修改上下文path
  19. linux下的usb转串口的使用(修改)【转】
  20. 高并发第十二弹:并发容器J.U.C -- Executor组件FutureTask、ForkJoin

热门文章

  1. Hive 基本操作
  2. 注解实战Beforeclass和Afterclass
  3. 再次理解JS的prototype,__proto__和constructor
  4. kafka内外网集群配置
  5. node工具是是什么东西
  6. Python 绘图与可视化 matplotlib 制作Gif动图
  7. [WPF] 圆形等待效果
  8. 再识Quartz
  9. jdk动态代理(转)
  10. POJ 2369