dsh-orphan-cleaner:扫描并结束 DSH 重启后遗留的孤儿进程

前言

在 DSH 里长期跑 MCP stdio 连接器或本地 dev server 时,比较常见的情况是:Host 退出或你反复重启 DSH 之后,子进程并没有一起被回收。MCP 每建一次连接往往会拉起 npx → cmd → mcp-server 一整棵进程树;几十个几十 MB 的 node 进程叠在一起,会明显拖慢 CPU,也容易占满数据库连接。手工在任务管理器里找 pid 既费时,又容易误杀还在用的程序。

dsh-orphan-cleaner 是社区维护者 zhangkaiqiu 发布的 DSH 插件,分类为 admin-security。它把「父进程已死、自己还在」的进程找出来,按置信度分组展示,并在界面或 HTTP 接口里做受控结束。下面按判定规则、界面用法、安装方式和接口说明如何使用。

这是什么

插件全名 dsh-orphan-cleaner,对应仓库 zhangkaiqiu/dsh-orphan-cleaner,目录页在 SkillHub。README 描述的定位是:扫描并终止 DSH 重启后遗留的孤儿进程,包括 MCP stdio 连接器、dev server 以及其它 stray 进程树。实现与文档当前面向 Windows(package.json 的 keywords 含 windows);许可证为 MIT,文档中提及的版本为 v0.2.0。

孤儿进程如何判定

判定沿 ParentProcessId 向上追溯:若链条终止在一个已经不存在的父进程上,则视为孤儿。

有两类情况必须排除,否则可能误杀整个桌面环境:

  1. 链条终止于 explorer.exe、services.exe、wininit.exe 不算孤儿。它们的父进程 smss.exe 会按设计退出,GUI 程序最终会归到 explorer。
  2. 系统进程(System、csrss、winlogon、dwm 等)同理,不按孤儿处理。

在确认「链条断裂」之后,再按命令行特征分档:

档位 判据 默认
高置信 命令行命中 mcp-server、server-redis-mcp、npx-cli.js、ssh-mcp、playwright-mcp、npm run dev、vite、dev.sh、server.js、esbuild 默认勾选
待确认 其它断裂进程(例如 VPN 终端、浏览器后台等) 默认不勾选

受保护对象包括:系统进程、桌面壳、当前 Host 及其全部祖先链,以及 msedge、openconnect、powershell 等——这些既不会被默认勾选,也不提供一键清理。

界面与典型用法

按钮在会话头部工具栏,紧挨「快捷启动」右侧(order 31)。角标显示高置信组数量;启动 DSH 后会自动扫一次,有残留时角标会变红。

面板按「进程组」聚合:一组对应一次启动留下的完整进程树,展示内存、创建时间、占用端口和成员 pid。勾选后点「结束选中」,会二次确认并重新扫描校验。

除界面外,插件暴露 HTTP 接口(见下一节),适合在自动化或排查脚本里主动触发扫描与结束。

安装与启用

从 GitHub 安装到指定 profile(桌面版示例为 desktop,命令行版常用 web,请改成你自己的 profile 名):

dsh plugin --profile desktop add github:zhangkaiqiu/dsh-orphan-cleaner

需要锁定版本时:

dsh plugin --profile desktop add github:zhangkaiqiu/dsh-orphan-cleaner#v0.2.0

更新已跟踪 main 的安装:

dsh plugin --profile desktop update dsh-orphan-cleaner

若安装时锁定了 tag,升级需重新 add 新 tag。装完后重启 DSH。

本地开发插件时,README 要求用 tarball 安装,不要用 link: 或目录依赖(否则 Node 可能把入口 realpath 指回源码盘,peerDependencies 会解析出第二份实例):

npm pack

在 DSH 插件管理页安装生成的 dsh-orphan-cleaner-0.2.0.tgz(文件名随 pack 版本变化)。

package.json 声明的运行时:node 为 ^22.19.0 || >=24.0.0。

HTTP 接口

方法 路径 说明
GET /orphan-cleaner/scan?force=1 扫描;force=1 绕过 2 秒缓存
POST /orphan-cleaner/kill 请求体:{ groupIds: string[] }
GET /orphan-cleaner/state 启动自动扫描摘要与上次清理结果

所有写操作接口带有跨站检查(Origin / Sec-Fetch-Site),用于降低恶意网页远程结束进程的风险。

适用场景与注意

适合:经常在 DSH 里开关 MCP stdio、本地 npm run dev / Vite 等,且重启后怀疑有 node 或 MCP 子进程残留的开发环境。

使用前建议自行查看仓库源码与 MIT 许可证。插件以当前 DSH 进程的权限运行,结束进程是不可逆操作;「待确认」档默认不勾选,就是为留出人工判断空间。误杀保护依赖 README 列出的系统进程与命令行规则,若你运行了未列入高置信特征的自定义命令,可能落在待确认档或需自行核对。

DSH 生态强调「一切皆插件」;SkillHub 等社区目录是独立站点,与 DeepSeek、幻方无官方从属关系。本文事实均来自上述 GitHub README 与仓库内 package.json。

若要在本机启用清理能力,可从目录页了解分类与索引:dsh-orphan-cleaner @ SkillHub,完整说明与 Issue 见 GitHub 仓库。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye