我有一个脚本,内部归结为:
trap "exit" SIGINT SIGTERM
while :
do
mplayer sound.mp3
sleep 3
done
(是的, 比上面的更有意义,但这与问题无关)。脚本的几个实例可能同时运行。
有时候我想要^ C脚本......但是这没有成功。据我了解,当^ C杀死mplayer
时,它会继续sleep
,当^ C杀死sleep
时,它会继续mplayer
,而我永远不会碰到它之间。据我了解,trap
永远不会奏效。
如何终止脚本?
答案 0 :(得分:1)
你可以获得mplayer
的PID,并在捕获时将杀戮信号发送到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
答案 1 :(得分:0)
mplayer在使用Ctrl-C停止时返回1,所以:
mplayer sound.mp3 || break
将完成这项工作。
这种方法的一个问题是,如果mplayer因为另一个原因退出1(即声音文件的格式不正确),它将会退出,这可能不是所希望的行为。