save code
This commit is contained in:
Executable
+45
@@ -0,0 +1,45 @@
|
||||
#!/usr/bin/env bash
|
||||
# 停止 GPU worker(由 run_worker.sh 后台启动的进程)。
|
||||
# 优先用 worker.pid;找不到则按端口兜底查找。
|
||||
set -euo pipefail
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
PID_FILE="worker.pid"
|
||||
PORT="${PORT:-8187}"
|
||||
|
||||
stop_pid() {
|
||||
local pid="$1"
|
||||
if kill -0 "$pid" 2>/dev/null; then
|
||||
echo ">> 停止 worker (PID $pid)"
|
||||
kill "$pid"
|
||||
# 等待优雅退出,最多 10 秒
|
||||
for _ in $(seq 1 10); do
|
||||
kill -0 "$pid" 2>/dev/null || return 0
|
||||
sleep 1
|
||||
done
|
||||
echo ">> 未在 10 秒内退出,强制 kill -9"
|
||||
kill -9 "$pid" 2>/dev/null || true
|
||||
fi
|
||||
}
|
||||
|
||||
# 1) 用 PID 文件
|
||||
if [ -f "$PID_FILE" ]; then
|
||||
PID="$(cat "$PID_FILE")"
|
||||
if [ -n "$PID" ] && kill -0 "$PID" 2>/dev/null; then
|
||||
stop_pid "$PID"
|
||||
rm -f "$PID_FILE"
|
||||
echo ">> 已停止"
|
||||
exit 0
|
||||
fi
|
||||
rm -f "$PID_FILE"
|
||||
fi
|
||||
|
||||
# 2) 兜底:按监听端口查找
|
||||
PIDS="$(ss -tlnp 2>/dev/null | grep ":${PORT} " | grep -oE 'pid=[0-9]+' | grep -oE '[0-9]+' | sort -u || true)"
|
||||
if [ -n "$PIDS" ]; then
|
||||
for p in $PIDS; do stop_pid "$p"; done
|
||||
echo ">> 已停止(按端口 ${PORT} 查找)"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo ">> 没有发现正在运行的 worker(端口 ${PORT})"
|
||||
Reference in New Issue
Block a user