184*_*615 5 linux bash bash-trap
我有一个脚本,其内部结构可归结为:
trap "exit" SIGINT SIGTERM
while :
do
mplayer sound.mp3
sleep 3
done
Run Code Online (Sandbox Code Playgroud)
(是的,这是比上面更有意义一点,但是这是不相关的问题)。脚本的多个实例可能同时运行。
有时我想 ^C 脚本......但这不会成功。据我了解,当 ^C 杀死时mplayer,它会继续sleep,当 ^C 杀死时sleep,它会继续mplayer,而且我从未碰巧在两者之间抓住它。据我了解,trap永远不会奏效。
如何终止脚本?
您可以获取 PID mplayer,并在捕获时向 mplayer 的 PID 发送终止信号。
function clean_up {
# Perform program exit housekeeping
KILL $MPLAYER_PID
exit
}
trap clean_up SIGHUP SIGINT SIGTERM
mplayer sound.mp3 &
MPLAYER_PID=$!
wait $MPLAYER_PID
Run Code Online (Sandbox Code Playgroud)