trap命令用于指定在接收到信号后将要采取的行动,我们将在本书后面的内容中详细介绍信号。trap命令的一种常见用途是在脚本程序被中断时完成清理工作。历史上,shell总是用数字来代表信号,而新的脚本程序应该使用信号的名字,它们保存在用#include命令包含进来的signal.h头文件中,在使用信号名时需要省略SIG前缀。你可以在命令提示符下输入命令trap -l来查看信号编号及其关联的名称。

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

trap命令的参数分为两部分,前一部分是接收到指定信号时将要采取的行动,后一部分是要处理的信号名。

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

如果要重置某个信号的处理条件到其默认值,只需简单的将command设置为-。如果要忽略某个信号,就把command设置为空字符串‘’。一个不带参数的trap命令将列出当前设置的信号及其行动的清单。

表2-11列出了X/Open规范里面规定的能够被捕获的比较重要的一些信号(括号里面的数字是传统的信号编号)。更多细节请参考signal在线手册的第七部分(man 7 signal)。

表 2-11

信     号

说     明

HUP(1)

挂起,通常因终端掉线或用户退出而引发

INT(2)

中断,通常因按下Ctrl+C组合键而引发

QUIT(3)

退出,通常因按下Ctrl+/组合键而引发

ABRT(6)

中止,通常因某些严重的执行错误而引发

ALRM(14)

报警,通常用来处理超时

TERM(15)

终止,通常在系统关机时发送

实验:信号处理

下面的脚本演示了一些简单的信号处理方法:

运行这个脚本,在每次循环时按下Ctrl+C组合键(或任何你系统上设定的中断键),我们将得到如下所示的输出:

实验解析

在这个脚本程序中,我们先用trap命令安排它在出现一个INT(中断)信号时执行rm –f /tmp/my_tmp_file_$$命令删除临时文件。脚本程序然后进入一个while循环,只要临时文件存在,循环就一直持续下去。当用户按下 Ctrl+C组合键时,就会执行rm –f /tmp/my_tmp_file_$$语句,然后继续下一个循环。因为临时文件现在已经被删除了,所以第一个while循环将正常退出。

接下来,脚本程序再次调用trap命令,这次是指定当一个INT信号出现时不执行任何命令。脚本程序然后重新创建临时文件并进入第二个while循环。这次当用户按下Ctrl+C组合键时,没有语句被指定执行,所以采取默认处理方式,即立即终止脚本程序。因为脚本程序被立即终止了,所以永远也不会执行最后的echo和exit语句。

linux trap命令相关推荐

  1. 【Linux】一步一步学Linux——trap命令(229)

    00. 目录 文章目录 00. 目录 01. 命令概述 02. 命令格式 03. 常用选项 04. 其它说明 05. 参考示例 06. 附录 01. 命令概述 trap命令用于指定在接收到信号后将要采 ...

  2. linux之trap命令

    一. trap捕捉到信号之后,可以有三种反应方式:  (1)执行一段程序来处理这一信号  (2)接受信号的默认操作  (3)忽视这一信号  二. trap对上面三种方式提供了三种基本形式: 第一种形式 ...

  3. Linux 命令(54)—— trap 命令(builtin)

    1.命令简介 trap 命令是 Shell 内建命令,用于指定在接收到信号后将要采取的动作.常见的用途是在脚本程序被中断时完成清理工作. 2.命令格式 trap [-lp] [ARG] [SIGSPE ...

  4. linux下的trap命令

    trap命令用于指定在接收到信号后将要采取的动作.常见的用途是在脚本程序被中断时完成清理工作.不过,这次我遇到它,是因为客户有个需求:从终端访问服务器的用户,其登陆服务器后会自动运行某个命令,例如打开 ...

  5. linux下trap命令和SIGHUP信号量详解

    trap命令用于指定在接收到信号后将要采取的动作.常见的用途是在脚本程序被中断时完成清理工作.我在写自动升级脚本的时候,为防止脚本运行期间是不能允许其使用Ctrl+C等中断退出的,故使用了trap命令 ...

  6. 【Linux】一步一步学Linux——enable命令(212)

    00. 目录 文章目录 00. 目录 01. 命令概述 02. 命令格式 03. 常用选项 04. 参考示例 05. 总结 06. 附录 01. 命令概述 enable命令可以用于启动或关闭 shel ...

  7. 收集Linux常用命令

    1.ls 文件属性: -:普通文件 d:目录文件 b:块设备 c:字符设备文件 l:符号连接文件 p:命令管道 s:套接字文件 文件权限: 9位数字,每3位一组 文件硬链接次数 文件所属主(owner ...

  8. linux常用命令--开发调试篇

    前言 Linux常用命令中有一些命令可以在开发或调试过程中起到很好的帮助作用,有些可以帮助了解或优化我们的程序,有些可以帮我们定位疑难问题.本文将简单介绍一下这些命令. 转自:https://www. ...

  9. Linux 常用命令如何使用?

    作者 | 守望 责编 | 郭芮 Linux常用命令中有一些命令可以在开发或调试过程中起到很好的帮助作用,有些可以帮助了解或优化我们的程序,有些可以帮我们定位疑难问题. 本文将简单介绍一下这些命令. 示 ...

最新文章

  1. 数据结构课程上机参考代码
  2. Python的零基础超详细讲解(第三天)-Python的基础语法
  3. 使用spring-loaded开源项目,实现java程序和web应用的热部署
  4. 过滤器应用【编码、敏感词、压缩、转义过滤器】
  5. java把字符串变代码,Java/javaScript将字符串转变成可执行的语句
  6. 数据流图中flow不显示文字_发动机系统数据流一般参数的解读
  7. 用package.json配置NodeJS项目的模块声明
  8. Java IO流之随机读写流RandomAccessFile
  9. 基于阿里云镜像源使用kubeadm安装k8s单master节点集群(v1.17.3)
  10. android如何让自定义控件居中,Android自定义控件之自定义TextView,实现drawableLeft可以和文字一起居中...
  11. hadoop日志文件
  12. 助力句子变换:35W抽象、43W同义、13W简称三大知识库对外开源
  13. 【Python爬虫】知识点简单总结
  14. 转贴:匹配中文的正则表达式及其他
  15. Matplotlib - plot用例
  16. 解决Ubuntu系统“无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系”的有效方法
  17. 理解C语言——从小菜到大神的晋级之路(9)——多维数组
  18. mysql 与紫金桥_现在常用的国产组态软件哪个更好用些?
  19. 苹果cms视频模板源码
  20. 好看的php表格样式,分享四个非常好看实用的CSS样式表格

热门文章

  1. python语言能干什么-python语言都可以做什么
  2. python流程控制语句-【Python学习之三】流程控制语句
  3. python100行代码-python代码统计 100行
  4. python快速入门答案-python快速入门基础知识
  5. 编写规范--Web前端开发修炼之道
  6. JS作用域和作用域链
  7. 8、模态对话框、非模态对话框
  8. MaperReduce实验
  9. 最近的生活 - 18年03月20日
  10. 【OpenCV学习笔记之一】图像加载,修改及保存