diff --git a/agv_app/stop_all.sh b/agv_app/stop_all.sh new file mode 100644 index 0000000..f07a9c7 --- /dev/null +++ b/agv_app/stop_all.sh @@ -0,0 +1,38 @@ +#!/bin/bash +# stop_all.sh - 关闭 AGV 拍摄系统所有相关进程 + +echo "正在停止 AGV 系统..." + +# 1. 关闭 Flask 主程序 +echo "[1/3] 关闭 Flask 服务..." +pkill -f "python3 app.py" 2>/dev/null +sleep 1 + +# 2. 关闭 ROS2 bringup(杀掉整个 start.sh 及其子进程) +echo "[2/3] 关闭 ROS2 bringup..." +# 用 pkill 杀掉 agv_pro_bringup 相关进程 +pkill -f "agv_pro_bringup" 2>/dev/null +pkill -f "agv_pro_navigation2" 2>/dev/null +# 如果 bringup 是由 start.sh 启动的,杀掉 start.sh 进程树 +pkill -f "start.sh" 2>/dev/null +pkill -f "bringup" 2>/dev/null +sleep 1 + +# 3. 清理 ROS2 daemon(防止残留) +echo "[3/3] 清理 ROS2 daemon..." +source /opt/ros/humble/setup.bash 2>/dev/null +ros2 daemon stop 2>/dev/null || true + +# 确保所有相关进程都已停止 +sleep 1 +remaining=$(ps aux | grep -E "python3 app.py|agv_pro_bringup|agv_pro_navigation2|navigation2" | grep -v grep | wc -l) +if [ "$remaining" -eq 0 ]; then + echo "✅ 所有进程已关闭" +else + echo "⚠️ 仍有 $remaining 个进程残留,已强制终止" + pkill -9 -f "python3 app.py" 2>/dev/null + pkill -9 -f "agv_pro_bringup" 2>/dev/null + pkill -9 -f "agv_pro_navigation2" 2>/dev/null +fi + +echo "停止完成" \ No newline at end of file