前言¶
在 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 向上追溯:若鏈條終止在一個已經不存在的父進程上,則視爲孤兒。
有兩類情況必須排除,否則可能誤殺整個桌面環境:
- 鏈條終止於
explorer.exe、services.exe、wininit.exe不算孤兒。它們的父進程smss.exe會按設計退出,GUI 程序最終會歸到 explorer。 - 系統進程(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 倉庫。