如何在一个.sh脚本运行结束后终止另一个正在运行的.sh脚本?
解决方案
先纠正当前运行逻辑的问题
你目前使用的sh example.sh; sh playmusic.sh是顺序执行逻辑,只有example.sh完全运行结束后才会启动playmusic.sh,没法实现你需要的「example运行期间播放音乐、运行结束就停」的效果。
场景1:还未启动命令,想实现自动停止效果
你可以把音乐播放脚本放到后台运行,记录它的进程ID,等example.sh执行结束后主动终止对应进程即可,完整命令如下:
# 后台启动音乐播放脚本 sh playmusic.sh & # 记录音乐脚本的进程ID PLAY_PID=$! # 运行你的业务脚本 sh example.sh # 业务脚本运行结束后直接终止音乐进程 kill $PLAY_PID
以上逻辑执行后,只要example.sh跑完,音乐就会自动停止,不需要你手动操作。
场景2:已经按原有命令启动,需要手动终止正在运行的音乐
如果现在example.sh已经跑完,playmusic.sh正在前台循环播放,可选以下任意一种方法终止:
- 方法1:在当前运行命令的终端按下
Ctrl + C,即可直接终止前台运行的playmusic.sh - 方法2:如果终端不在前台/已经被关闭,直接杀所有mpg123进程即可停止音乐,命令如下:
pkill mpg123 - 方法3:如果只想终止当前这个
playmusic.sh进程,可以先查进程ID再杀:- 执行
ps aux | grep playmusic.sh,找到对应进程第二列的PID数值 - 执行
kill 你查到的PID即可,进程无响应的话可以换成kill -9 你查到的PID
- 执行
内容的提问来源于stack exchange,提问作者user16194927
相关产品推荐
相关产品推荐

