-------------------------------------
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