fix
This commit is contained in:
@@ -12,7 +12,10 @@
|
||||
| `build.sh` | 容器内编译 12 包(替代 `bash build.sh` 缺失的死链) | `docker exec ros2_dev bash /root/ros2_ws/scripts/build.sh` |
|
||||
| `test.sh` | 容器内跑 12 包测试 + 汇总 + 详细日志 | `docker exec ros2_dev bash /root/ros2_ws/scripts/test.sh` |
|
||||
| `launch.sh` | 容器内启动 `bringup/<name>.py` | `docker exec ros2_dev bash /root/ros2_ws/scripts/launch.sh pubsub_launch` |
|
||||
| `e2e_check.sh` | 端到端冒烟:启 4 节点跑 8s,验证 topic 互通 + 清理子进程 | `docker exec ros2_dev bash /root/ros2_ws/scripts/e2e_check.sh` |
|
||||
| `shell.sh` | 自动判断容器状态,进入开发终端 | `bash scripts/shell.sh` |
|
||||
| `clean.sh` | 删 `build/install/log`(编译产物) | `docker exec ros2_dev bash /root/ros2_ws/scripts/clean.sh` |
|
||||
| `clean_ros.sh` | SIGKILL 所有 chatter_* 残留进程(launch.sh forever 模式调试后用) | `docker exec ros2_dev bash /root/ros2_ws/scripts/clean_ros.sh` |
|
||||
|
||||
## 调用方式(2 选 1)
|
||||
|
||||
|
||||
+15
-4
@@ -16,21 +16,32 @@ sleep 3
|
||||
echo
|
||||
echo "[e2e] === 验证 topic ==="
|
||||
echo "[e2e] --- topic list ---"
|
||||
ros2 topic list --no-daemon | head -10
|
||||
ros2 topic list 2>/dev/null
|
||||
echo
|
||||
echo "[e2e] --- topic hz /chatter (3s) ---"
|
||||
timeout 3 ros2 topic hz /chatter --no-daemon 2>&1 | tail -5 || true
|
||||
# 用 stdbuf 强制行缓冲,避免 docker exec 捕获不到输出
|
||||
stdbuf -oL -eL timeout 3 ros2 topic hz /chatter 2>&1 | tail -5 || true
|
||||
echo
|
||||
echo "[e2e] --- topic info /chatter -v ---"
|
||||
ros2 topic info /chatter -v --no-daemon | head -20
|
||||
# 关键:不要 | head -N,会触发 BrokenPipe 让 ros2 崩
|
||||
# 用 ros2 自带 --no-arr 之外的参数,或者重定向后再过滤
|
||||
ros2 topic info /chatter -v 2>/dev/null | awk 'NR<=20' || true
|
||||
echo
|
||||
echo "[e2e] --- node list ---"
|
||||
ros2 node list --no-daemon
|
||||
ros2 node list 2>/dev/null
|
||||
|
||||
echo
|
||||
echo "[e2e] 关停 launch..."
|
||||
kill -INT "${LAUNCH_PID}" 2>/dev/null || true
|
||||
pkill -f "ros2 launch bringup" 2>/dev/null || true
|
||||
# ❗ ros2 launch fork 出的 chatter_* 子进程会 reparent 到 PID 1(孤儿),
|
||||
# SIGINT 给 launch 不会传递给它们,必须显式 pkill
|
||||
pkill -INT -f chatter_publisher 2>/dev/null || true
|
||||
pkill -INT -f chatter_subscriber 2>/dev/null || true
|
||||
pkill -INT -f chatter_publisher_cpp 2>/dev/null || true
|
||||
pkill -INT -f chatter_subscriber_cpp 2>/dev/null || true
|
||||
sleep 1
|
||||
pkill -9 -f chatter 2>/dev/null || true
|
||||
wait "${LAUNCH_PID}" 2>/dev/null || true
|
||||
echo
|
||||
echo "[e2e] ✅ DONE. 详细日志: cat /tmp/e2e_launch.log"
|
||||
|
||||
@@ -37,6 +37,13 @@ if [ "${RUNTIME}" -ge 0 ]; then
|
||||
echo "[launch.sh] reaching runtime limit, killing..."
|
||||
kill -INT "${LAUNCH_PID}" 2>/dev/null || true
|
||||
pkill -f "ros2 launch bringup ${NAME}" 2>/dev/null || true
|
||||
# ❗ launch fork 出的 chatter_* 子进程 reparent 到 PID 1,SIGINT 不会传递
|
||||
pkill -INT -f chatter_publisher 2>/dev/null || true
|
||||
pkill -INT -f chatter_subscriber 2>/dev/null || true
|
||||
pkill -INT -f chatter_publisher_cpp 2>/dev/null || true
|
||||
pkill -INT -f chatter_subscriber_cpp 2>/dev/null || true
|
||||
sleep 1
|
||||
pkill -9 -f chatter 2>/dev/null || true
|
||||
wait "${LAUNCH_PID}" 2>/dev/null || true
|
||||
else
|
||||
# 0 = 等用户 Ctrl+C
|
||||
@@ -47,6 +54,7 @@ else
|
||||
nohup ros2 launch bringup "${NAME}.py" >/dev/null 2>&1 &
|
||||
disown
|
||||
echo "[launch.sh] ✅ launched in background (forever mode, pid=$!)"
|
||||
echo "[launch.sh] (用 'pkill -f chatter' 或 'bash scripts/clean.sh' 清理)"
|
||||
fi
|
||||
|
||||
echo "[launch.sh] ✅ exit"
|
||||
|
||||
Reference in New Issue
Block a user