trap命令--在脚本中处理信号

来源:互联网 发布:淘宝全部订单显示不全 编辑:程序博客网 时间:2024/05/16 18:06
trap是一个shell内建命令,用于指定在接收到信号后将要采取的动作,常见的用途是在脚本程序被中断时完成清理工作。比如,按Ctrl+C会使脚本终止执行,实际上系统发送了SIGINT信号给脚本进程,SIGINT信号的默认处理方式就是退出程序。如果要在Ctrl+C不退出程序,那么就得使用trap命令来指定一下SIGINT的处理方式了。trap命令不仅仅处理Linux信号,还能对脚本退出(EXIT)、调试(DEBUG)、错误(ERR)、返回(RETURN)等情况指定处理方式。

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

trap command signal

它有三种形式分别对应三种不同的信号回应方式。

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

第二种:
trap signal-list
trap不指定任何命令,或者是 "-" ,接受信号的默认操作,默认操作是结束进程的运行。

第三种:
trap " " signal-list
trap命令指定一个空命令串,允许忽视信号,我们用到的就是这一种。

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

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

例:trap "echo no way" 1 2 3 9
     指定了命令,如果遇到 HUP INT QUIT KILL 信号,则执行 echo no way 命令
trap -p
     显示当前trap设置
trap "" INT QUIT
     遇到 INT 和 QUIT 信号,则忽略,什么也不做
trap 1 2 3 9 
     没有指定命令部分,恢复 HUP INT QUIT KILL 这些信号设置;


more:http://blog.csdn.net/world_hello_100/article/details/18049599 
0 0