DeepSeek Harness Hub
← 返回列表

端口占用处置PangYiMing/dsh-port-guard

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
未验证

识别端口占用进程身份,复用、换端口或精确终止

尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/8/13 · 已提供中文文档

DSH plugin: triage port conflicts (reuse / switch / precise kill) — 端口占用处置

综合分
26.6
GitHub 分
26.6
用户评分
★ Stars
0
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add PangYiMing/dsh-port-guard
该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/16(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

dsh-port-guard

DeepSeek Harness 插件 · 端口占用处置 / DSH plugin for triaging port conflicts

dev server 启动报 EADDRINUSE: address already in use——最常见的前置障碍。但不是所有 EADDRINUSE 都该 kill。

The classic blocker before any dev server starts. But not every EADDRINUSE should be killed.

核心洞察:EADDRINUSE 有三条路,不是只有"杀"

| 情况 | 占端口的是谁 | 正确动作 |
|---|---|---|
| A. 自己的、还在正常服务的 dev server | 上次会话遗留的同项目 dev server | 复用,比重启快 |
| B. 别人的项目 / 不该杀的进程 | 另一个项目 / 系统服务 | 换端口绕开,不抢杀 |
| C. 确认是僵尸/残留进程 | 已死但端口没释放 / 重复拉起的 | 精确 PID kill |

先判断属于哪种,再决定动作。不无脑 kill。

定位 + 取证 Identify & investigate

./scripts/port-guard.sh 8080

脚本会打印占用进程的完整身份信息:

定位
lsof -nP -iTCP:8080 -sTCP:LISTEN
身份:启动时刻/运行时长/有无控制终端
ps -o pid,ppid,lstart,etime,tty,%cpu,rss,command -p "$PID"
工作目录 → 属于哪个项目
lsof -a -p "$PID" -d cwd -Fn | grep '^n' | sed 's/^n//'
子进程(有子进程的别直接杀父,先看树)
pgrep -P "$PID"

判读组合:

| 观察 | 含义 |
|---|---|
| PPID=1 | 父进程已退出,被 launchd 收养 —— 孤儿 |
| tty=?? | 没有控制终端,不是人在终端里跑的 |
| fd0 → /dev/null,fd1/fd2 → 某个 .log | nohup cmd > log 2>&1 & 指纹 → agent/脚本起的 |
| tty=ttys00X | 人在终端窗口起的,杀之前更该问一声 |
| etime 好几天 + %cpu 0.0 + rss 极小 | 挂了很久的僵尸 watcher(可能 watch 源码目录,某天突然醒来写产物) |

三种处置 Three paths

A. 复用:确认进程还活着(kill -0 只检测不杀)
kill -0 "$PID" && echo alive

B. 换端口绕开,不杀别人的
PORT=18080 node index.js

C. 精确 kill(先 SIGTERM 给优雅退出机会,不行再 SIGKILL)
./scripts/port-guard.sh 8080 --kill

安全红线 Safety rules

1. 先判断该不该杀——EADDRINUSE 不等于该杀(复用 > 重启)。
2. 绝不 killall node / pkill -f node——精确 PID,不误伤其他正常服务。
3. PID < 100 绝不杀——系统进程。
4. 别人的进程不杀——换端口绕开。
5. 命令行看不懂 / 不确定是什么——停下报告用户,不擅自杀。

安装 Install

发布到 npm 后
dsh plugin --profile demo add dsh-port-guard

或从 GitHub 安装
dsh plugin --profile demo add github:PangYiMing/dsh-port-guard

许可证 License

MIT

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群