[英]ctrl+c to kill a bash script with child processes
我有一個腳本,其內部內容歸結為:
trap "exit" SIGINT SIGTERM
while :
do
mplayer sound.mp3
sleep 3
done
(是的,它比上述更加有意義一些,但這是不相關的問題)。 腳本的多個實例可能同時運行。
有時我想^ C腳本...但是那沒有成功。 據我了解,當^ C殺死mplayer
,它將繼續sleep
,而當^ C殺死sleep
,它將繼續mplayer
,而我再也不會碰到它。 據我了解, trap
永遠是行不通的。
如何終止腳本?
您可以獲取mplayer
的PID,並在捕獲時將kill信號發送到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
mplayer使用Ctrl-C停止時返回1,因此:
mplayer sound.mp3 || break
會做的工作。
此方法的一個問題是,如果mplayer由於其他原因退出1(即,聲音文件格式錯誤),則無論如何它都會退出,並且可能不是您期望的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.