文档章节

shell中trap捕捉到信号的处理

最新更新消息
 最新更新消息
发布于 2015/10/01 18:04
字数 585
阅读 138
收藏 2

一. trap捕捉到信号之后,可以有三种反应方式:


(1)执行一段程序来处理这一信号


(2)接受信号的默认操作


(3)忽视这一信号


二. trap对上面三种方式提供了三种基本形式:


第一种形式的trap命令在shell接收到signal list清单中数值相同的信号时,将执行双


引号中的命令串。


trap 'commands' signal-list


trap "commands" signal-list


为了恢复信号的默认操作,使用第二种形式的trap命令:


trap signal-list


第三种形式的trap命令允许忽视信号


trap " " signal-list



注意:


(1) 对信号11(段违例)不能捕捉,因为shell本身需要捕捉该信号去进行内存的转储。


(2) 在trap中可以定义对信号0的处理(实际上没有这个信号), shell程序在其终止(如


执行exit语句)时发出该信号。


(3) 在捕捉到signal-list中指定的信号并执行完相应的命令之后, 如果这些命令没有


将shell程序终止的话,shell程序将继续执行收到信号时所执行的命令后面的命令,这样将


很容易导致shell程序无法终止。


另外,在trap语句中,单引号和双引号是不同的,当shell程序第一次碰到trap语句时,


将把commands中的命令扫描一遍。此时若commands是用单引号括起来的话,那么shell不会


对commands中的变量和命令进行替换, 否则commands中的变量和命令将用当时具体的值来


kill -l可以列出系统的信号

通常我们需要忽略的信号有四个,即:HUP, INT, QUIT, TSTP,也就是信号1, 2, 3, 24

使用这样的语句可以使这些中断信号被忽略:

trap "" 1 2 3 24 或 trap "" HUP INT QUIT TSTP

用 trap :1 2 3 24 或 trap HUP INT QUIT TSTP使其回复默认值。

用stty -a可以列出中断信号与键盘的对应,分别执行上面的命令后,运行

tail -f /etc/passwd, 然后尝试用键盘中断,试试两种情况(默认和忽略)下有何不同。

更方便的是我们可以用在shell中用trap定义我们自己的信号处理程序


© 著作权归作者所有

最新更新消息
粉丝 1
博文 39
码字总数 49637
作品 0
崇明
私信 提问
Linux的Shell编程 Shell程序设计的流程控制

和其他高级程序设计语言一样,Shell提供了用来控制程序执行流程的命令,包括条件分支和循环结构,用户可以用这些命令创建非常复杂的程序。 与传统语言不同的是,Shell用于指定条件值的不是布...

魏邪乎
2014/02/13
28
0
谈shell之信号捕捉及处理

Shell 中常用的几个信号 在64位系统上,执行kill –l 命令可以看到几乎所有的信号[shell@u ~]$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGF...

123yph321
2013/07/16
0
0
shell 脚本编程之信号捕捉和主机探测

shell 脚本编程之信号捕捉和主机探测 =============================================================================== 概述: ======================================================......

逐梦小涛
2017/03/03
0
0
Shell主要逻辑源码级分析 (2)——SHELL作业控制

版权声明:本文由李航原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/110 来源:腾云阁 https://www.qcloud.com/community 作业控制本身也是基于进程控...

偶素浅小浅
2016/11/01
91
0
trap - 在脚本中处理信号

一:用途说明 trap命令是shell内建的命令,它用在脚本中指定信号如何处理。   比如,按Ctrl+C会使脚本终止执行,实际上系统发送了SIGINT信号给脚本进程,SIGINT信号的默认处理方式就是退出程...

yaohong
2018/03/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java快递电子面单打印接口对接demo

之前的后天管理系统的电子面单打印使用的是灵通打单。 使用相对比较麻烦,需要到处Excel之后再导入,麻烦。 快递鸟有电子面单api,后台系统直接对接很是方便,不过也遇到了好些问题。 不难是...

程序的小猿
23分钟前
3
0
fasjtjson文档

https://github.com/alibaba/fastjson/wiki/JSONField

jirak
24分钟前
3
0
Mybatis中插入多条记录

Oracle数据库 实现方法 <insert id="saveWithdrawLog"> INSERT ALL INTO OSM_TRADE_DETAIL(SID,MBR_ID,USR_ID,TRADE_MONEY,TRADE_TYPE,TRADE_TIME,TRADE_WAY,PAY_ID) VALUES(#{si......

豫华商
24分钟前
3
0
Flink on YARN(下):常见问题与排查思路

作者:杨弢(搏远) Flink 支持 Standalone 独立部署和 YARN、Kubernetes、Mesos 等集群部署模式,其中 YARN 集群部署模式在国内的应用越来越广泛。Flink 社区将推出 Flink on YARN 应用解读...

开源中国小二
26分钟前
3
0
技术沙龙|京东云端到端多媒体关键技术揭秘

编者按:从带来更高编码效率、更好的用户体验的京享高清,到直播架构与网络演进优化,从而为用户带来更流畅的观看体验,以及运维系统的异常自动修复和高弹性的多媒体存储架构,一层一层展示出...

京东云技术新知
26分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部