本站首页    管理页面    写新日志    退出                                          --==~欢迎光临FoxWolf的Blog~==--   



 日志搜索


«July 2025»
12345
6789101112
13141516171819
20212223242526
2728293031


公告


我的分类

日志更新

最新评论

留言板

链接

 


Blog信息
blog名称:FoxWolf
日志总数:127
评论数量:246
留言数量:0
访问次数:849675
建立时间:2006年5月31日




[Linux学习]linux shell编程 trap命令
文章收藏,  电脑与网络,  校园生活

FoxWolf 发表于 2008/7/2 11:31:01

trap命令用于指定在接收到信号后将要采取的行 动,我们将在本书后面的内容中详细介绍信号。trap命令的一种常见用途是在脚本程序被中断时完成清理工作。历史上,shell总是用数字来代表信号,而 新的脚本程序应该使用信号的名字,它们保存在用#include命令包含进来的signal.h头文件中,在使用信号名时需要省略SIG前缀。你可以在命 令提示符下输入命令trap -l来查看信号编号及其关联的名称。 对于那些不熟悉信号的人们来说,“信号”是指那些被异步发送到一个程序的事件。默认情况下,它们通常会终止一个程序的运行。 trap命令的参数分为两部分,前一部分是接收到指定信号时将要采取的行动,后一部分是要处理的信号名。 500)this.width=500'> 请记住,脚本程序通常是以从上到下的顺序解释执行的,所以必须在你想保护的那部分代码以前指定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) 终止,通常在系统关机时发送 实验:信号处理 下面的脚本演示了一些简单的信号处理方法: 500)this.width=500'> 500)this.width=500'> 500)this.width=500'> 运行这个脚本,在每次循环时按下Ctrl+C组合键(或任何你系统上设定的中断键),我们将得到如下所示的输出: 500)this.width=500'> 实验解析 在这个脚本程序中,我们先用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语句。


阅读全文(4529) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.047 second(s), page refreshed 144785758 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号