Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
停止bash脚本时运行命令_Bash_Macos - Fatal编程技术网

停止bash脚本时运行命令

停止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,因为它可能会杀死不相关的进程(例如,

在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
,因为它可能会杀死不相关的进程(例如,来自脚本的另一个实例,甚至不同的脚本)。相反,将玩家的PID放在一个变量中,并只杀死该PID。

您需要在bash脚本中放入一个
trap
语句:

trap 'killall afplay' EXIT

但是请注意,如果bash进程发送了一个
KILL
信号(9),这将不起作用,因为进程不可能截获该信号。

您对获取进程的pid有什么建议吗?(我认为如果该过程是在本地启动的,那么这将是一个直截了当的过程)