在有些情况下,我们不希望自己的shell脚本在运行时刻被中断,比如说我们写得shell脚
本设为某一用户的默认shell,使这一用户进入系统后只能作某一项工作,如数据库备份, 我
们可不希望用户使用ctrl+C之类便进入到shell状态,做我们不希望做的事情。这便用到了信号
本设为某一用户的默认shell,使这一用户进入系统后只能作某一项工作,如数据库备份, 我
们可不希望用户使用ctrl+C之类便进入到shell状态,做我们不希望做的事情。这便用到了信号
处理。
trap命令用于指定在接收到信号后将要采取的行动。
trap命令的一种常见用途是在脚本程序被中断时完成清理工作。历史上,shell总是用数字来代表信号,而新的脚本程序应该使用信号的名字。你可以在命令提示符下输入命令trap -l来查看信号编号及其关联的名称,在使用信号名时需要省略SIG前缀。
trap命令的参数分为两部分,前一部分是接收到指定信号时将要采取的行动,后一部分是要处理的信号名。
trap command signal
如果要重置某个信号的处理条件到其默认值,只需简单的将command设置为-。如果要忽略某个信号,就把command设置为空字符串‘’。一个不带参数的trap命令将列出当前设置的信号及其行动的清单。
注意:对于类似INT的信号,如果捕获后,在trap设置的命令中不提供退出机制,程序将无法通过 Ctl+C 停止。
1 #!/bin/bash
2
3 trap "bash $0 && kill $$" 1 2
4 while ((1))
5 do
6 echo $0, $$
7 sleep 2
8 echo "loop"
9 done
脚本无法通过ctrl-c退出