ctrl+c 使用子进程杀死 bash 脚本

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永远不会奏效。

如何终止脚本?

Oz1*_*123 8

您可以获取 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)