簡體   English   中英

ctrl + c使用子進程殺死bash腳本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM