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 这些信号设置;
阅读(1840) | 评论(0) | 转发(0) |