#!/bin/bash set -e readonly WORKER_HOSTS=( "xx.xx.xx.xx" ) readonly REMOTE_USER="root" readonly TRAIN_SCRIPT="main" echo "--- Killing local processes matching '${TRAIN_SCRIPT}' first ---" pkill -9 -f "${TRAIN_SCRIPT}" || true pkill -f python echo "Local check complete." echo echo "🛑 Sending targeted kill signal to processes matching '${TRAIN_SCRIPT}' on all remote hosts in parallel..." for HOST in "${WORKER_HOSTS[@]}"; do ( echo "--- Processing host: ${HOST} ---" ssh -n "${REMOTE_USER}@${HOST}" " set -e # 远程脚本也应该在出错时停止 pkill -f python # 精确查找由 python 启动的、且包含 TRAIN_SCRIPT 名称的进程 # 这是为了避免误杀其他同名进程(比如一个名为 'main_rebuttal' 的shell脚本) PIDS=\$(pgrep -f \"python.*${TRAIN_SCRIPT}\") if [ -z \"\$PIDS\" ]; then echo '[INFO] ✅ No matching processes found on this host.' else echo '[WARN] 🔥 Found processes to kill:' # 在杀死前显示详细信息,增加安全性 ps -fp \$PIDS echo '[KILL] Killing PIDs: '\$PIDS'...' kill -9 \$PIDS echo '[OK] ✅ Processes killed successfully.' fi " echo "--- Finished host: ${HOST} ---" echo ) & done wait echo "🎉 All hosts have been processed."