进程清理工具

一个轻量级的macOS守护进程,用于查找并终止耗尽电池的孤立进程,特别适用于使用AI编码工具的开发者。

  • by radu2lupu
  • Shell
  • 本地部署
  • 更新于
在 GitHub 查看 radu2lupu/runaway-killer

使用说明

逃跑杀手

一个轻量级的macOS守护进程,可以发现并杀死耗尽电池的孤立进程。为使用AI编码工具(Claude Code、Cursor、Windsurf、Copilot等)的开发人员构建,后台MCP服务器和辅助运行时可以比其父会话更持久。

的问题

AI编码工具生成MCP(模型上下文协议)服务器进程以扩展其功能。他们也经常为助手旋转 node 和 java 运行时间通过 npm exec, npx,或应用程序托管的子流程树。当您关闭会话时,这些帮助程序可以继续运行——在后台默默地消耗CPU和内存。在笔记本电脑上,少数孤儿助手可以将你的电池寿命缩短一半。

其他工具也是如此:Wine/CrossOver留下了 winedevice.exe 进程,Electron应用程序留下孤立的助手,等等。

它的作用

通过launchd每5分钟运行一次,并终止符合以下条件的进程 结构标准 --没有硬编码的进程名称或脆弱的启发式方法:

MCP服务器检测 (3个独立信号):

  1. 进程父进程是 npm exec 或 npx (stdio MCP服务器)
  2. 进程从npm/npx缓存路径运行(~/.npm/_npx/, node_modules/.bin/)
  3. 进程是已知AI编码工具的直接子进程,其路径中有“mcp”或“server”

杀戮标准 (两者都需要放弃的证据):

  • 管道破裂 --进程的stdin管道在另一端没有实时读取器(主机应用程序已关闭)
  • 重复项过多 --同一父级下同一MCP服务器的3个以上实例

失控过程清理:

  • 杀死孤立的葡萄酒工艺(winedevice, wine64-preloader, wineserver)仅当CrossOver未运行时

安全功能

  • 首先发送SIGTERM,等待0.5秒,然后仅在需要时发送SIGKILL
  • 在终止之前验证进程身份(防止PID回收)
  • 跳过昂贵的 lsof 当没有候选时进行扫描(大多数运行在<0.1s内完成)
  • Lockfile防止并发运行
  • 日志轮换可防止日志文件无限增长

安装

# Download
curl -o ~/.local/bin/runaway-killer https://raw.githubusercontent.com/radu2lupu/runaway-killer/main/runaway-killer
chmod +x ~/.local/bin/runaway-killer

# Install the launchd agent (runs every 5 minutes)
runaway-killer install

或者克隆并安装:

git clone https://github.com/radu2lupu/runaway-killer.git
cd runaway-killer
cp runaway-killer ~/.local/bin/
runaway-killer install

卸载

runaway-killer uninstall
rm ~/.local/bin/runaway-killer

用法

runaway-killer                # Run once
runaway-killer --dry-run      # Preview what would be killed
runaway-killer --verbose      # Show detailed detection info
runaway-killer --dry-run -v   # Preview with full details
runaway-killer install        # Install launchd agent
runaway-killer uninstall      # Remove launchd agent
runaway-killer --version      # Show version

配置

所有配置都是通过环境变量进行的。在shell配置文件中设置它们,或在手动运行时覆盖它们。

变量 默认值 描述
RUNAWAY_MAX_PER_TYPE 3 在杀死额外服务器之前,每种MCP服务器类型的最大实时实例数
RUNAWAY_EXTRA_HOSTS -- 其他AI主机模式(空格分隔,grep-E正则表达式)
RUNAWAY_LOG /tmp/runaway-killer.log 日志文件路径
RUNAWAY_DRY_RUN 0 设置为 1 预览而不杀人
RUNAWAY_VERBOSE 0 设置为 1 用于详细记录

添加自定义AI主机模式

如果您使用默认情况下未检测到的AI编码工具,请添加它:

export RUNAWAY_EXTRA_HOSTS="MyTool\\.app /my-custom-ai"

支持的AI编码工具

开箱即用:

  • 克劳德代码/克劳德桌面
  • 光标
  • 帆板运动
  • GitHub Copilot(通过Codex)
  • 泽德
  • 科迪姆
  • 帮助
  • 继续

日志

tail -f /tmp/runaway-killer.log

原木自动旋转5000行。

需求

  • macOS(使用launchd、lsof和zsh)
  • zsh(自Catalina以来macOS上的默认shell)

许可证

麻省理工学院