停止bash脚本时运行命令
在bash脚本中,当用户停止脚本(使用ctrl-c)时,如何执行命令 目前,我有:停止bash脚本时运行命令,bash,macos,Bash,Macos,在bash脚本中,当用户停止脚本(使用ctrl-c)时,如何执行命令 目前,我有: afplay file.mp3 while true: do osascript -e "set volume 10" end 但是我希望它在用户完成后执行killall afplay,不管它是command-c还是其他按键。陷阱“killall afplay”退出使用陷阱 trap "kill $pid" INT TERM EXIT 还要避免killall或pkill,因为它可能会杀死不相关的进程(例如,
afplay file.mp3
while true:
do osascript -e "set volume 10"
end
但是我希望它在用户完成后执行
killall afplay
,不管它是command-c还是其他按键。陷阱“killall afplay”退出
使用陷阱
trap "kill $pid" INT TERM EXIT
还要避免
killall
或pkill
,因为它可能会杀死不相关的进程(例如,来自脚本的另一个实例,甚至不同的脚本)。相反,将玩家的PID放在一个变量中,并只杀死该PID。您需要在bash脚本中放入一个trap
语句:
trap 'killall afplay' EXIT
但是请注意,如果bash进程发送了一个
KILL
信号(9),这将不起作用,因为进程不可能截获该信号。您对获取进程的pid有什么建议吗?(我认为如果该过程是在本地启动的,那么这将是一个直截了当的过程)