-------------------------------------
trap 'date' SIGUSR2
echo before
while true; do
sleep 0.01
done
echo after
kill -SIGUSR2 XXX #date立即被执行
kill -SIGUSR2 XXX #date立即被执行
--------------------------------------
trap 'date' SIGUSR2
echo before
sleep 10
echo after
kill -SIGUSR2 XXX #date未被执行,直到sleep 10结束后立即被执行,最后再打印出after
--------------------------------------
trap 'date' SIGUSR2
echo before
sleep 100 &
wait
echo after
kill -SIGUSR2 XXX #wait被立即中断(wait的返回码是一个大于128的值),date立即被执行,然后打印出after退出
--------------------------------------
shell在执行过程中,在一个命令执行过程中不会执行trap指定的命令,只有在命令执行完之后才会执行trap指定的命令;
Ctrl+c #给程序发送SIGINT信号
Ctrl+\ #给程序发送SIGTERM信号
bash shell会忽略SIGQUIT信号,即:1个shell进程run时发SIGQUIT不会退出;但你自己编译的程序run时收到SIGQUIT是会退出的
用EXIT来做清理:trap "{ rm -f $tmp_file ; exit 255; }" EXIT
用ERR来做警告,可以参见:http://blog.csdn.net/sosodream/article/details/5681893和http://blog.csdn.net/sosodream/article/details/5724650
用DEBUG来做调试,例如来跟踪变量的变化:
trap "echo tmp_value is being changed." DEBUG
bla bla bla
declare -t tmp_value=38