以前给同事写过一个Bash脚本。今天他发现有个问题,按Ctrl+C
中止程序后,Bash生成的Log文件会莫名变得很大。应该是程序被中断后,脚本没有执行清理工作,后台有些程序还在运行。所以Bash脚本被中断了,但是脚本中启动的某些后台程序还在运行,持续向Log文件输出内容,致其变大。要解决这个问题,可以使用Bash提供的trap
命令捕获中断信号,执行特定的操作。
trap
的用法如下:
trap [-lp] [[arg] signal_spec ...]
-
-l
: 列出所有信号的序号及名称 -
-p
: 列出特定信号对应的处理指令 -
arg
: 是signal_spec指定的信号的处理指令 -
signal_spec
: 是需要捕获的信号
上栗子!
#!/bin/bash
trap 'onCtrlC' INT
function onCtrlC () {
echo 'Ctrl+C is captured'
}
while true; do
echo 'I am working!'
sleep 1
done
执行上述脚本,Ctrl+C
按键将触发onCtrlC
函数。
一些特殊的信号还有EXIT
, DEBUG
, RETURN
, ERR
。arg
也可以为空。
参考文献
- help trap
网友评论