trap命令用于指定在接收到信号后将要采取的动作,常见的用途是在脚本程序被中断时完成清理工作。

  kill和trap等都可以看到信号编号及其关联的名称。

“信号”是指那些被异步发送到一个程序的事件,默认情况下,它们通常会终止一个程序的运行。

基本格式:

trap command signal

前一部分是接收到指定信号时将要采取的行动,后一部分是要处理的信号名。

1、trap "commands" signal-list

当脚本收到signal-list清单内列出的信号时,trap命令执行双引号中的命令。

2、trap signal-list

trap不指定任何命令,接受信号的默认操作,默认操作是结束进程的运行。

3、trap " " signal-list

trap命令指定一个空命令串,允许忽视信号。

注意:

  脚本程序通常是以从上到下的顺序解释执行的,所以必须在想保护的那部分代码以前指定trap命令。

信号量详细列表:trap -l 或是 kill -l

 SIGHUP 终止进程 挂起,终端线路挂断

 SIGINT 终止进程 中断进程

 SIGQUIT 建立CORE文件 退出,终止进程,并且生成core文件

 SIGILL 建立CORE文件 非法指令

 SIGTRAP 建立CORE文件 跟踪自陷

 SIGABRT 程序自己发现错误并调用abort时产生

 SIGBUS 建立CORE文件 总线错误

 SIGSEGV 建立CORE文件 段非法错误

 SIGFPE 建立CORE文件 浮点异常

 SIGIOT 建立CORE文件 执行I/O自陷

 SIGKILL 终止进程 杀死进程

 SIGPIPE 终止进程 向一个没有读进程的管道写数据

 SIGALARM 终止进程 报警,计时器到时

 SIGTERM 终止进程 软件终止信号,通常在系统关机时发送

 SIGSTOP 停止进程 非终端来的停止信号

 SIGTSTP 停止进程 终端来的停止信号

 SIGCONT 忽略信号 继续执行一个停止的进程

 SIGURG 忽略信号 I/O紧急信号

 SIGIO 忽略信号 描述符上可以进行I/O

 SIGCHLD 忽略信号 当子进程停止或退出时通知父进程

 SIGTTOU 停止进程 后台进程写终端

 SIGTTIN 停止进程 后台进程读终端

 SIGXGPU 终止进程 CPU时限超时

 SIGXFSZ 终止进程 文件长度过长

 SIGWINCH 忽略信号 窗口大小发生变化

 SIGPROF 终止进程 统计分布图用计时器到时

 SIGUSR1 终止进程 用户定义信号1

 SIGUSR2 终止进程 用户定义信号2

 SIGVTALRM 终止进程 虚拟计时器到时

杀死所有子进程

  因为如果父进程执行完毕后,检测core的进程都没有发现core,所有子进程还存在,这就是传说中的僵尸进程。

  所以要杀死父进程所有子进程。

shell> kill -9 0  #杀死脚本自己及衍生出来的子进程

最后贴上源码示例一下:

shell> pa.script.sh

#! /bin/bash
#调用sub_script.sh 检测core trap 'echo "捕获成功";exit' echo "当前位置:父脚本" echo "PID is $$" bash sub_script.sh  #开启子进程脚本

shell> sub_script.sh

#! /bin/bash
#this shell script is designed to catch core,if corehappens,will send the father to exit echo "当前脚本:子脚本" echo "PID is $$" echo "PPID is $PPID" sleep kill - $PPID

trap-接收信号_采取行动的更多相关文章

  1. pyqt 发射接收信号

    翻页控件: 一.定义并发射信号: #!/usr/bin/python # #coding=utf-8 # __author__='' from PyQt4.QtCore import * from P ...

  2. shell——trap捕捉信号(附信号表)

    trap捕捉信号有三种形式 第一种:trap "commands" signal-list 当脚本收到signal-list清单内列出的信号时,trap命令执行双引号中的命令. 例 ...

  3. shell中trap捕获信号

    信号是一种进程间通信机制,它给应用程序提供一种异步的软件中断,使应用程序有机会接受其他程序活终端发送的命令(即信号).应用程序收到信号后,有三种处理方式:忽略,默认,或捕捉.进程收到一个信号后,会检查 ...

  4. 为shell布置陷阱:trap捕捉信号方法论

    本文目录: 1.1 信号说明 1.2 trap布置陷阱 1.3 布置完美陷阱必备知识 家里有老鼠,快消灭它!哎,又给跑了.老鼠这小东西跑那么快,想直接直接消灭它还真不那么容易.于是,老鼠药.老鼠夹子或 ...

  5. linux中脚本扑捉(trap)信号问题

    扑捉ctrl+c信号: #!/bin/bash trap ; function trap() { echo "You press Ctrl+C."; echo "Exit ...

  6. 使用uart串口接收模块接收信号,控制led灯闪烁

    功能描述: 使用遵循uart协议的接收模块接收控制信号,用来控制led的闪烁. 设计输入: 1.uart输入信号 2.时钟信号 3.复位信号 4.led信号 设计思路: 总体上:前面已经写了串口接收模 ...

  7. C++框架_之Qt的信号和槽的详解

    C++_之Qt的信号和槽的详解 1.概述 信号槽是 Qt 框架引以为豪的机制之一.所谓信号槽,实际就是观察者模式.当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal ...

  8. linux中的信号简介和trap命令

    1.信号 linux通过信号来在运行在系统上的进程之间通信,也可以通过信号来控制shell脚本的运行 主要有一下信号 1 ##进程重新加载配置 2 ##删除进程在内存中的数据 3 ##删除鼠标在内存中 ...

  9. 信号发送接收函数:sigqueue/sigaction

    信号是一种古老的进程间通信方式,下面的例子利用sigqueue发送信号并附带数据:sigaction函数接受信号并且处理时接受数据. 1.sigqueue: 新的信号发送函数,比kill()函数传递了 ...

随机推荐

  1. Androidstudio2.0.0下载,欢迎下载

    Androidstudio开发工具很实用,但是没了Google下载还是蛮麻烦的,所以呢Eric就向大家提供了下载的地址,其实就是从自己网盘考过来的,大家可以下载的. http://pan.baidu. ...

  2. So Easy-Ntp嵌入式软件移植

    一.导语和准备工作 Ntp是一种对时的软件,对客户端来说我们只要输入ntpdate IP,如ntpdate 192.168.1.254(192.168.1.254是ntp服务器,window电脑激活自 ...

  3. thinkphp3.2.x多图上传并且生成多张缩略图

    html部分 <!DOCTYPE html><html><head><meta http-equiv="Content-Type" con ...

  4. ecshop SQL注入漏洞导致代码执行

    漏洞名称:ecshop SQL注入漏洞导致代码执行补丁编号:11208761补丁文件:/includes/libinsert.php补丁来源:云盾自研漏洞描述:ecshop的/includes/lib ...

  5. 改变iOS app的icon(iOS10.3)

    改变iOS app的icon 官方 iOS10.3新增了可以让开发者去更改app的icon,接下来看看怎么更改. 官方API给的东西很少,只是介绍了一个实例方法: open func setAlter ...

  6. 【转】windows浏览共享切换用户登录的方法

    1.打开 “我的电脑” 单击 菜单栏“工具”,选择“映射网络驱动器” ,单击“使用其他用户名”,在弹出的对话框之中输入用户名.密码2.遇到提示“您已经建立连接,不能重复连接”类似信息的时候,在开始-运 ...

  7. ZEROC ICE 跨平台间程序调用 java版

    前言: 本来建博客是为了和大家分享一些前端的开发经验和心得呢,但是阴差阳错,第一篇技术博客确实关于跨平台,跨语言服务端调用的解决方案---ZEROC ICE. 最近一个项目涉及到java.python ...

  8. mysql自动备份删除5天前的备份

    1.查看磁盘空间情况: # df -h 2.创建备份目录: 上面我们使用命令看出/home下空间比较充足,所以可以考虑在/home保存备份文件: cd /home mkdir backup cd ba ...

  9. idea2015的使用心得

    今天打开myeclipse感觉里面全是project,也懒着换地方了,因为这些代码还要时常看,索性安装了idea试试水,感觉还不错,用起来并不比myeclipse差,跟webstorm差不多,他俩就是 ...

  10. memcached+tomcat转发forward时 sessionid一直变化的问题

    今天遇到了一个很奇怪的问题, 我在tomcat过滤器 中, 对请求过来的静态资源及html页面做了forword转发操作,核心代码如下: private void redirectMobile(Htt ...