From e0752d8d98a26bef199716c623bdcfe7c3fa1cb8 Mon Sep 17 00:00:00 2001 From: BruceChen Date: Sun, 12 Apr 2026 19:57:54 +0800 Subject: [PATCH] tools: harden task3 session debug scripts --- tools/mcc-debug.sh | 50 +++++++++++++++++++++++++++++++++++++------ tools/mcc-env.sh | 14 ++++++++---- tools/mcc-log-tail.sh | 28 +++++++++++++++++++++--- 3 files changed, 78 insertions(+), 14 deletions(-) diff --git a/tools/mcc-debug.sh b/tools/mcc-debug.sh index 52e607c1..a96bfc7c 100644 --- a/tools/mcc-debug.sh +++ b/tools/mcc-debug.sh @@ -44,11 +44,47 @@ FILE_INPUT=false while [[ $# -gt 0 ]]; do case "$1" in - -v|--version) VERSION="$2"; shift 2 ;; - -m|--mode) MODE="$2"; shift 2 ;; - -p|--port) PORT="$2"; PORT_SET_BY_USER=true; shift 2 ;; - --session) SESSION="$2"; shift 2 ;; - --username) USERNAME="$2"; shift 2 ;; + -v|--version) + if [[ $# -lt 2 ]]; then + echo "$1 requires a value" >&2 + exit 1 + fi + VERSION="$2" + shift 2 + ;; + -m|--mode) + if [[ $# -lt 2 ]]; then + echo "$1 requires a value" >&2 + exit 1 + fi + MODE="$2" + shift 2 + ;; + -p|--port) + if [[ $# -lt 2 ]]; then + echo "$1 requires a value" >&2 + exit 1 + fi + PORT="$2" + PORT_SET_BY_USER=true + shift 2 + ;; + --session) + if [[ $# -lt 2 ]]; then + echo "--session requires a value" >&2 + exit 1 + fi + SESSION="$2" + shift 2 + ;; + --username) + if [[ $# -lt 2 ]]; then + echo "--username requires a value" >&2 + exit 1 + fi + USERNAME="$2" + shift 2 + ;; --no-build) DO_BUILD=false; shift ;; --debug-on) DEBUG_ON=true; shift ;; --file-input) FILE_INPUT=true; shift ;; @@ -183,7 +219,7 @@ if [[ "$MODE" == "tui" ]]; then # TUI mode: needs a real tty - no pipes or redirects allowed tmux kill-session -t "$MCC_TMUX_SESSION" 2>/dev/null || true tmux new-session -d -s "$MCC_TMUX_SESSION" -x 160 -y 50 \ - "cd '$REPO_ROOT' && dotnet run --project MinecraftClient -c Release --no-build -- ${MCC_ARGS[*]}; echo '=== MCC EXITED ==='; sleep 600" + "cd '$REPO_ROOT' && dotnet run --project MinecraftClient -c Release --no-build -- $MCC_ARGS_CMD; echo '=== MCC EXITED ==='; sleep 600" echo "" echo " TUI mode started in tmux session '$MCC_TMUX_SESSION'" echo " (TUI mode uses a real terminal; log file is not available, use MCC's /debug command)" @@ -243,7 +279,7 @@ else # Interactive classic mode: run in tmux (no pipe - ConsoleInteractive also needs tty) tmux kill-session -t "$MCC_TMUX_SESSION" 2>/dev/null || true tmux new-session -d -s "$MCC_TMUX_SESSION" -x 160 -y 50 \ - "cd '$REPO_ROOT' && dotnet run --project MinecraftClient -c Release --no-build -- ${MCC_ARGS[*]}; echo '=== MCC EXITED ==='; sleep 600" + "cd '$REPO_ROOT' && dotnet run --project MinecraftClient -c Release --no-build -- $MCC_ARGS_CMD; echo '=== MCC EXITED ==='; sleep 600" echo "" echo " Classic mode started in tmux session '$MCC_TMUX_SESSION'" echo "" diff --git a/tools/mcc-env.sh b/tools/mcc-env.sh index 61de29c4..c848e586 100644 --- a/tools/mcc-env.sh +++ b/tools/mcc-env.sh @@ -210,7 +210,7 @@ mcc-kill() { done session="$(_mcc_resolve_session "$session")" - local pid_file meta_file tmux_session pid + local pid_file meta_file tmux_session pid pid_comm pid_args local killed=false pid_file="$(_mcc_session_pid_file "$session")" meta_file="$(_mcc_session_meta_file "$session")" @@ -219,9 +219,15 @@ mcc-kill() { if [[ -f "$pid_file" ]]; then pid="$(tr -cd '0-9' < "$pid_file")" if [[ -n "$pid" ]] && kill -0 "$pid" 2>/dev/null; then - kill "$pid" 2>/dev/null || true - echo "Killed MCC PID $pid for session '$session'" - killed=true + pid_comm="$(ps -p "$pid" -o comm= 2>/dev/null | tr -d '[:space:]')" + pid_args="$(ps -p "$pid" -o args= 2>/dev/null || true)" + if [[ "$pid_comm" == "MinecraftClient" ]] || { [[ "$pid_comm" == "dotnet" ]] && [[ "$pid_args" == *"MinecraftClient"* ]]; }; then + kill "$pid" 2>/dev/null || true + echo "Killed MCC PID $pid for session '$session'" + killed=true + else + echo "Refusing to kill PID $pid for session '$session': unexpected process '$pid_comm'" + fi else echo "No live MCC PID found for session '$session' (pid file: $pid_file)" fi diff --git a/tools/mcc-log-tail.sh b/tools/mcc-log-tail.sh index 557c6b88..2fc269bb 100644 --- a/tools/mcc-log-tail.sh +++ b/tools/mcc-log-tail.sh @@ -18,9 +18,31 @@ SERVER_ONLY=false while [[ $# -gt 0 ]]; do case "$1" in - --session) SESSION="$2"; shift 2 ;; - --server) SERVER_VER="$2"; shift 2 ;; - --server-only) SERVER_ONLY=true; SERVER_VER="$2"; shift 2 ;; + --session) + if [[ $# -lt 2 ]]; then + echo "--session requires a value" >&2 + exit 1 + fi + SESSION="$2" + shift 2 + ;; + --server) + if [[ $# -lt 2 ]]; then + echo "--server requires a value" >&2 + exit 1 + fi + SERVER_VER="$2" + shift 2 + ;; + --server-only) + if [[ $# -lt 2 ]]; then + echo "--server-only requires a value" >&2 + exit 1 + fi + SERVER_ONLY=true + SERVER_VER="$2" + shift 2 + ;; -h|--help) echo "Usage: tools/mcc-log-tail.sh [--session NAME] [--server VER] [--server-only VER]" exit 0 ;;