#!/usr/bin/env bash set -Eeuo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" BACKEND_PID="" FRONTEND_PID="" CLEANED_UP=0 cleanup() { if [[ "${CLEANED_UP}" -eq 1 ]]; then return fi CLEANED_UP=1 trap - EXIT INT TERM for pid in "${BACKEND_PID}" "${FRONTEND_PID}"; do if [[ -n "${pid}" ]] && kill -0 "${pid}" 2>/dev/null; then kill "${pid}" 2>/dev/null || true fi done for pid in "${BACKEND_PID}" "${FRONTEND_PID}"; do if [[ -n "${pid}" ]]; then wait "${pid}" 2>/dev/null || true fi done } trap cleanup EXIT INT TERM "${SCRIPT_DIR}/run_backend.sh" & BACKEND_PID=$! "${SCRIPT_DIR}/run_frontend.sh" & FRONTEND_PID=$! echo "前后端调试服务已启动,按 Ctrl+C 同时停止。" echo "日常开发建议在两个终端分别运行 run_backend.sh 和 run_frontend.sh。" while true; do if ! kill -0 "${BACKEND_PID}" 2>/dev/null; then status=0 wait "${BACKEND_PID}" || status=$? echo "平台后端已退出(状态码:${status}),正在停止前端。" >&2 exit "${status}" fi if ! kill -0 "${FRONTEND_PID}" 2>/dev/null; then status=0 wait "${FRONTEND_PID}" || status=$? echo "平台前端已退出(状态码:${status}),正在停止后端。" >&2 exit "${status}" fi sleep 1 done