chore(dev): 按端口杀进程树,避免 Windows 孤儿监听
新增 stop.bat/ps1/sh,并写入本地开发规则:停服务用脚本、停后复核端口。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
42
stop.sh
Normal file
42
stop.sh
Normal file
@@ -0,0 +1,42 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# 按端口终止 :3000 / :3001 的监听进程(含子进程)
|
||||
# 用法:./stop.sh
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
cd "$ROOT_DIR"
|
||||
|
||||
kill_port() {
|
||||
local port="$1"
|
||||
local pids
|
||||
if command -v lsof &>/dev/null; then
|
||||
pids="$(lsof -tiTCP:"$port" -sTCP:LISTEN 2>/dev/null || true)"
|
||||
elif command -v fuser &>/dev/null; then
|
||||
fuser -k "${port}/tcp" 2>/dev/null || true
|
||||
echo " :${port} 已尝试 fuser -k"
|
||||
return
|
||||
else
|
||||
echo " 需要 lsof 或 fuser 才能按端口清理"
|
||||
return 1
|
||||
fi
|
||||
if [ -z "${pids}" ]; then
|
||||
echo " :${port} 空闲"
|
||||
return
|
||||
fi
|
||||
# shellcheck disable=SC2086
|
||||
echo " :${port} -> PID ${pids}"
|
||||
kill ${pids} 2>/dev/null || true
|
||||
sleep 0.3
|
||||
# shellcheck disable=SC2086
|
||||
kill -9 ${pids} 2>/dev/null || true
|
||||
}
|
||||
|
||||
echo "══════════════════════════════════════════"
|
||||
echo " jiang13-bbs Dev Stopper"
|
||||
echo "══════════════════════════════════════════"
|
||||
echo "按端口终止 :3000 / :3001 ..."
|
||||
kill_port 3000
|
||||
kill_port 3001
|
||||
echo "完成。停库请另执行: docker compose down"
|
||||
echo "══════════════════════════════════════════"
|
||||
Reference in New Issue
Block a user