我启动以下脚本,我在前台运行bash shell(让他们说shell1),从另一个shell(shell2)运行kill -SIGUSR1 pidof(scriptA)。什么都没发生。我究竟做错了什么 ?我尝试了其他信号(SIGQUIT等)但结果是一样的。
test_trap.sh
function iAmDone { echo "Trapped Signal"; exit 0 }
trap iAmDone SIGUSR1
echo "Running... "
tail -f /dev/null # Do nothing
在shell1中
./test_trap.sh
在shell2中
kill -SIGUSR1 ps aux | grep [t]est_trap | awk '{print $2}'
答案 0 :(得分:4)
在尾部完成之前不会执行陷阱。但尾巴永远不会完成。尝试:
tail -f /dev/null &
wait
陷阱将在不等待尾部完成的情况下执行,但如果退出尾部将继续运行。所以你可能想要陷阱中的kill $!
。