如何在 Mac 上卸载 PortKiller
PortKiller 是一款免费开源的菜单栏应用,列出 Mac 上正在监听的 TCP 端口,可以结束端口背后的进程,来自它的 GitHub 项目。README 里还提到收藏、带通知的监视端口、Kubernetes kubectl port-forward 会话和 Cloudflare Tunnel 视图。它没有账号。测试里只找到它的偏好设置、缓存和一个网络存储文件夹,收藏和监视的端口存在哪里没有核对,想留的话移除前先记下来。本文覆盖项目 GitHub Release 的磁盘映像和 Homebrew cask portkiller。
退出并移除应用
- 用过它的 Kubernetes 端口转发的话,先在 PortKiller 里停掉,免得应用没了转发还在跑。
- 从菜单栏图标退出 PortKiller。它是菜单栏应用,没有 Dock 图标。测试里第一次退出请求没有让它退出,Mole 先发了退出请求,大约四秒后又强制退出。
- 打开访达,进入「应用程序」,把 PortKiller 拖进废纸篓。
测试里 PortKiller 没有注册登录项,也没有启动代理。删掉应用后它还留在系统设置 › 通用 › 登录项与扩展里的话,在那里关掉。
数据在哪里
在访达按 Shift + Command + G 逐项打开,不存在的路径跳过即可。
| 位置 | 内容 | 处理建议 |
|---|---|---|
~/Library/Preferences/com.portkiller.app.plist |
偏好设置,测试里 362 字节 | 移除。Mole 默认勾选。 |
~/Library/Caches/com.portkiller.app |
缓存,135 KB | 移除。Mole 默认勾选。 |
~/Library/HTTPStorages/com.portkiller.app |
网络存储,57 KB | 移除。Mole 默认勾选。 |
getconf DARWIN_USER_CACHE_DIR 打印出的文件夹里的 com.portkiller.app |
Mole 的临时缓存行,270 KB | 移除。Mole 默认勾选。 |
~/Library/HTTPStorages/com.portkiller.app.binarycookies |
Cookie 文件,Homebrew cask 的 zap 清单里有它,测试时不存在 | 你的 Mac 上有的话就移除。 |
检查结果
pgrep -il portkiller
pgrep -fl 'kubectl port-forward'
ls -d /Applications/PortKiller.app "$HOME/Library/Preferences/com.portkiller.app.plist" "$HOME/Library/Caches/com.portkiller.app"
- 第一个
pgrep没有输出,说明 PortKiller 没在跑。打印出一行就是还活着的进程,退出它,或者重启一次 Mac。 - 第二个
pgrep没有输出,说明没有端口转发在跑。打印出一行是比应用活得更久的kubectl转发,不是 PortKiller 本身,不再需要的话再结束它。 ls -d提示「No such file or directory」说明那个路径已经没了,打印出路径说明还在盘上。
用 Homebrew 安装时
brew uninstall --cask portkiller
这个 cask 的普通卸载会先退出 PortKiller(com.portkiller.app),再移除应用。它的 zap 清单会把缓存、HTTPStorages 文件夹及其 Cookie 文件、偏好设置文件移进废纸篓,都在 ~/Library 里。brew uninstall --cask --zap portkiller 不看 Mole 的勾选。Mole 只在整个移除范围通过 zap 检查时才加 --zap:zap 的每个路径都在 ~/Library 里,都不碰你没勾选的行,存在的路径也都是 Mole 列出过的行。否则 Mole 不加 --zap,你勾选的行由 Mole 自己移除。
Mole 会列出什么
Mole 默认勾选应用、偏好设置文件、缓存、HTTPStorages 文件夹和临时缓存行。移除之前 Mole 会请 PortKiller 退出,它不退出就强制退出。状态页把 PortKiller 显示成一行,更新页读 PortKiller 的 Sparkle 更新源。
这次检查覆盖了什么
2026 年 11 月 9 日,在一台装着 macOS 26 的测试机上,这次检查从项目的 GitHub Release 取了 PortKiller 3.4.0(Universal)的磁盘映像,校验和与 Homebrew cask portkiller 一致,没有运行 brew install,直接拷进「应用程序」,打开一次,再用源码构建、重新签名的 Debug 版 Mole 勾上所有审查行卸载,没有用 Mole 的公证发布版。Mole 先发了退出请求,四秒后强制退出,然后把应用和 4 行移进废纸篓,没有失败项,重新扫描也没发现 PortKiller 的路径。状态页显示一行 PortKiller,3 个进程。Mole 检测到 Sparkle 更新源,也没有执行更新。结束端口进程、Kubernetes 端口转发、Cloudflare Tunnel、Homebrew 和 Mole 公证发布版都没有测。
