53 lines
2.0 KiB
Bash
53 lines
2.0 KiB
Bash
#!/usr/bin/env bash
|
|
# 停止本项目所有进程(主程序 + 进程池worker + ffmpeg子进程 + coscli)。
|
|
# 用法: bash stop.sh 普通停止
|
|
# bash stop.sh -y 不确认直接停
|
|
set -u
|
|
|
|
echo "==> 即将停止的进程:"
|
|
ps -eo pid,etime,rss,args 2>/dev/null | grep -E "main\.py|run_worker\.py|multiprocessing|forkserver|[f]fmpeg|[c]oscli" | grep -v grep | grep -v "stop.sh" || echo " (没找到运行中的进程)"
|
|
echo ""
|
|
|
|
if [ "${1:-}" != "-y" ]; then
|
|
read -r -p "确认全部杀掉? [y/N] " ans
|
|
case "$ans" in
|
|
y|Y) ;;
|
|
*) echo "已取消"; exit 0 ;;
|
|
esac
|
|
fi
|
|
|
|
echo "==> 1. 杀主程序 + 进程池worker"
|
|
pkill -9 -f "main.py" 2>/dev/null && echo " ✓ main.py"
|
|
pkill -9 -f "run_worker.py" 2>/dev/null && echo " ✓ run_worker.py"
|
|
pkill -9 -f "multiprocessing" 2>/dev/null && echo " ✓ multiprocessing worker"
|
|
pkill -9 -f "forkserver" 2>/dev/null && echo " ✓ forkserver"
|
|
|
|
echo "==> 2. 杀 ffmpeg 子进程(不会自动死, 必须单独杀, 否则占GPU/CPU)"
|
|
pkill -9 ffmpeg 2>/dev/null && echo " ✓ ffmpeg"
|
|
pkill -9 ffprobe 2>/dev/null && echo " ✓ ffprobe"
|
|
|
|
echo "==> 3. 杀残留 coscli(正在传输的)"
|
|
pkill -9 -f "coscli" 2>/dev/null && echo " ✓ coscli"
|
|
|
|
sleep 1
|
|
echo ""
|
|
echo "==> 检查残留:"
|
|
LEFT=$(ps -eo pid,args 2>/dev/null | grep -E "main\.py|run_worker\.py|multiprocessing|forkserver|[f]fmpeg|[c]oscli" | grep -v grep | grep -v "stop.sh")
|
|
if [ -z "$LEFT" ]; then
|
|
echo " ✓ 全部已停止"
|
|
else
|
|
echo " ⚠️ 仍有残留, 再杀一次:"
|
|
echo "$LEFT"
|
|
echo "$LEFT" | awk '{print $1}' | xargs -r kill -9 2>/dev/null
|
|
echo " 已强制杀掉"
|
|
fi
|
|
|
|
# 可选: 看GPU是否释放
|
|
if command -v nvidia-smi >/dev/null 2>&1; then
|
|
echo ""
|
|
echo "==> GPU 占用(确认ffmpeg/whisper已释放):"
|
|
nvidia-smi --query-gpu=index,memory.used,utilization.gpu --format=csv,noheader 2>/dev/null
|
|
fi
|
|
echo ""
|
|
echo "停止完成。重启: bash scripts/启动.sh 30"
|