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

Linux Shell脚本编程-信号捕获的更多相关文章

  1. Linux shell脚本编程(三)

    Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...

  2. Linux shell脚本编程(二)

    Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...

  3. Linux shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  4. Linux Shell脚本编程--Linux特殊符号大全

    Linux Shell脚本编程--Linux特殊符号大全 linux_shell 特殊符号的介绍 2011

  5. Linux Shell脚本编程while语句

    Linux Shell脚本编程while语句案例 1,每隔3秒,打印一次系统负载 #!/bin/bash while truedo    uptime    sleep 3done 2,把监控结果保存 ...

  6. Linux Shell脚本编程-基础1

    概述:  shell脚本在Linux系统管理员的运维工作中非常重要.shell脚本能够帮助我们很方便的管理服务器,因为我们可以指定一个任务计划,定时的去执行某一个脚本以满足我们的需求.本篇将从编程基础 ...

  7. Linux shell脚本编程基础之练习篇

    shell脚本编程基础之练习篇. 1.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. #!/bin/bash ] then echo "请输入一个参数& ...

  8. 【学习】Linux Shell脚本编程

    1.脚本的组成和执行 Linux shell脚本的结构并不复杂,其主要由变量.内部命令以及shell的语法结构和一些函数.其他命令行的程序等组成,以下是一个简单的shell脚本. #!/bin/bas ...

  9. [linux] shell脚本编程-xunsearch安装脚本学习

    安装脚本setup.sh #!/bin/sh # FULL fast install/upgrade script # See help message via `--help' # $Id$ # s ...

随机推荐

  1. 执行python manage.py makemigrations时报错TypeError: __init__() missing 1 required positional argument: 'on_delete'

    在执行python manage.py makemigrations时报错: TypeError: __init__() missing 1 required positional argument: ...

  2. 根据 thread id 停止一个线程

    出自 https://github.com/Bogdanp/dramatiq/blob/master/dramatiq/middleware/threading.py#L62 thread_id = ...

  3. HDU 2669 Romantic( 拓欧水 )

    链接:传送门 题意:求解方程 X * a + Y * b = 1 的一组最小非负 X 的解,如果无解输出 "sorry" 思路:裸 exgcd /***************** ...

  4. NOI 2018 你的名字 (后缀自动机+线段树合并)

    题目大意:略 令$ION2017=S,ION2018=T$ 对$S$建$SAM$,每次都把$T$放进去跑,求出结尾是i的前缀串,能匹配上$S$的最长后缀长度为$f_{i}$ 由于$T$必须在$[l,r ...

  5. python和sudo python 出现no module named XXX

    今天使用python执行文件,然而显示权限不够, 但是加上sudo之后,又会显示no module named XXX 问题在于两者python路径中包含的库不同.解决方法: 分别进入两个python ...

  6. 数组实例的 entries(),keys() 和 values()

    数组实例的 entries(),keys() 和 values() entries(),keys()和values(),用于遍历数组.它们都返回一个遍历器对象,可以用for...of循环进行遍历,唯一 ...

  7. php获取时间是星期几

    PHP星期几获取代码: date("l"); //data就可以获取英文的星期比如Sundaydate("w"); //这个可以获取数字星期比如123,注意0是 ...

  8. Ubuntu 安装 Courier New字体和雅黑consolas字体

    一直觉得Ubuntu下的字体不是很好,但毕竟不影响使用,然后作开发的时候eclipse的字体完全没有windows下的两大适合编成的字体courier new 和consloas .可以使用系统安装字 ...

  9. leetcode 题解 || Longest Common Prefix 问题

    problem: Write a function to find the longest common prefix string amongst an array of strings. 寻找 0 ...

  10. js mudules.js

    var InsertRow={ isMoveRow:false, // 是否存在动态移动行 curSelRowIndex:"", // 当前选中行序号 prevSelRowInde ...