關(guān)于trap的實(shí)驗(yàn)
-------------------------------------
trap 'date' SIGUSR2
echo before
while true; do
sleep 0.01
done
echo after
kill -SIGUSR2 XXX #date立即被執(zhí)行
kill -SIGUSR2 XXX #date立即被執(zhí)行
--------------------------------------
trap 'date' SIGUSR2
echo before
sleep 10
echo after
kill -SIGUSR2 XXX #date未被執(zhí)行,直到sleep 10結(jié)束后立即被執(zhí)行,最后再打印出after
--------------------------------------
trap 'date' SIGUSR2
echo before
sleep 100 &
wait
echo after
kill -SIGUSR2 XXX #wait被立即中斷(wait的返回碼是一個(gè)大于128的值),date立即被執(zhí)行,然后打印出after退出
--------------------------------------
shell在執(zhí)行過(guò)程中,在一個(gè)命令執(zhí)行過(guò)程中不會(huì)執(zhí)行trap指定的命令,只有在命令執(zhí)行完之后才會(huì)執(zhí)行trap指定的命令;
Ctrl+c #給程序發(fā)送SIGINT信號(hào)
Ctrl+\ #給程序發(fā)送SIGTERM信號(hào)
bash shell會(huì)忽略SIGQUIT信號(hào),即:1個(gè)shell進(jìn)程run時(shí)發(fā)SIGQUIT不會(huì)退出;但你自己編譯的程序run時(shí)收到SIGQUIT是會(huì)退出的
用EXIT來(lái)做清理:trap "{ rm -f $tmp_file ; exit 255; }" EXIT
用ERR來(lái)做警告,可以參見:http://blog.csdn.net/sosodream/article/details/5681893和http://blog.csdn.net/sosodream/article/details/5724650
用DEBUG來(lái)做調(diào)試,例如來(lái)跟蹤變量的變化:
trap "echo tmp_value is being changed." DEBUG
bla bla bla
declare -t tmp_value=38
posted on 2013-08-14 16:08 so true 閱讀(409) 評(píng)論(0) 編輯 收藏 所屬分類: Linux