Skip to content

🔫 跨平台端口管理工具 - 一条命令解决端口占用 | Cross-platform CLI to kill processes on ports

License

Notifications You must be signed in to change notification settings

TNT-Likely/killport

Repository files navigation

🔫 killport

Go Version License Release

一条命令杀死占用端口的进程

English | 简体中文

以前:

# 查找进程
lsof -ti:3000
# 手动 kill
kill -9 <PID>

现在:

killport 3000
# ✓ Killed process 12345 (node) on port 3000

Quick Kill Demo

为什么选择 killport?

每个开发者都遇到过这些痛点:

  • 🔴 "端口 3000 已被占用"
  • 🔴 Google 搜索"如何在 Mac 上 kill 端口"
  • 🔴 复制粘贴一些 lsof 命令
  • 🔴 每天重复 5 次

killport 终结这种痛苦。一条简单命令。随处可用。

✨ 特性

  • 快速: 毫秒级 kill 进程
  • 🎯 简单: 一条命令,无需记忆复杂参数
  • 🌍 跨平台: Linux、macOS、Windows 全支持
  • 🛡️ 安全: kill 前显示进程信息并确认
  • 📋 详细: 显示进程名、PID、用户等信息
  • 🔍 批量: killport 3000 8080 5000
  • 🎨 交互式模式: 无参数运行 killport,可视化选择要 kill 的进程
  • 📜 智能滚动: 自动适应终端高度,支持大量进程显示
  • 🔢 端口排序: 按端口号从小到大自动排序
  • ⚙️ 配置文件: 支持自定义端口预设组
  • 🚀 快捷命令: killport --dev 一键清理开发端口
  • 📦 预设组: killport preset frontend 批量管理端口
  • 👀 Watch 模式: killport watch 3000 持续监控端口占用状态
  • 🛡️ 保护模式: killport protect 5432 防止误杀重要端口
  • 📌 系统托盘: killport tray 常驻系统托盘,快速管理端口

📦 安装

从源码安装

# 克隆仓库
git clone https://github.com/TNT-Likely/killport.git
cd killport

# 构建并安装
make install

# 或仅构建
make build

使用 Go 安装

go install github.com/TNT-Likely/killport@latest

从 Release 下载

访问 Releases 页面 下载对应平台的二进制文件。

🚀 使用方法

基础用法

# Kill 占用 3000 端口的进程
killport 3000

# 输出:
# Port 3000 is used by:
#   PID:  12345
#   Name: node
#   User: yourname
#
# Kill this process? [y/N]: y
# ✓ Killed process 12345 (node) on port 3000

交互式模式 ✨ NEW

# 无参数运行,进入交互式模式
killport

Interactive Mode Demo

界面示例:

🔫 killport - Interactive Mode
🔍 Search: node_ (2/20)

  ▲ 5 more above...
  [✓] 3000    node          npm run dev
❯ [ ] 8080    main          ./main
  [ ] 🛡️ 5432    postgres      /opt/homebrew/opt/postgresql@14/bin/postgres
  ▼ 10 more below...

Showing 6-10 of 20 (filtered from 50) • Selected: 1
↑/k: up • ↓/j: down • Space: select • x/d: kill • p: protect • /: search • q: quit

操作说明:

  • ↑/↓k/j: 移动光标
  • Space: 选择/取消选择进程
  • xd: kill 选中的进程
  • p: 将选中的端口加入保护
  • /: 进入搜索模式,可搜索端口号、进程名、命令
  • ESC: 清除搜索/退出
  • q: 退出

搜索功能:

  • / 进入搜索模式
  • 输入端口号、进程名或命令关键词实时过滤
  • Enter 确认搜索,ESC 取消并清除过滤
  • 支持模糊匹配,例如搜索 "node" 会显示所有包含 node 的进程

批量操作

# Kill 多个端口
killport 3000 8080 5000

# 清理常用开发端口 ✨ NEW
killport --dev
# 清理: 3000, 8080, 5173, 5000, 4200

# 使用预设端口组 ✨ NEW
killport preset frontend
# 清理前端开发相关端口

killport preset backend
# 清理后端开发相关端口

killport preset database
# 清理数据库端口

配置文件 ✨ NEW

初始化配置

# 创建默认配置文件
killport init

# 强制覆盖已存在的配置
killport init --yes

配置格式

配置文件位置: ~/.killport.yaml~/.config/killport/config.yaml

presets:
  # 开发环境常用端口
  dev:
    - 3000  # React, Next.js
    - 8080  # 通用后端
    - 5173  # Vite
    - 5000  # Flask, Create React App
    - 4200  # Angular

  # 前端开发端口
  frontend:
    - 3000  # React, Next.js
    - 5173  # Vite
    - 5000  # CRA
    - 4200  # Angular
    - 8080  # Vue

  # 后端开发端口
  backend:
    - 8080  # Spring Boot, Tomcat
    - 8000  # Django, FastAPI
    - 9000  # PHP-FPM
    - 3001  # Node.js
    - 5000  # Flask

  # 数据库端口
  database:
    - 5432  # PostgreSQL
    - 3306  # MySQL
    - 27017 # MongoDB
    - 6379  # Redis

  # 自定义预设
  myproject:
    - 3000  # 前端
    - 8080  # API 网关
    - 8001  # 用户服务
    - 6379  # Redis

# 保护端口(可选)
# 被保护的端口无法被 killport 杀死
protected_ports:
  - 5432  # PostgreSQL
  - 3306  # MySQL
  - 27017 # MongoDB

Watch 模式 ✨ NEW

持续监控端口的占用状态,实时显示占用/释放事件:

# 监控 3000 端口
killport watch 3000

# 输出示例:
# 👀 Watching port 3000... (Press Ctrl+C to stop)
#
# [19:30:15] 🟢 Port 3000 occupied
#            PID: 12345, Process: node
#            Command: npm run dev
#            User: yourname
#
# [19:32:20] ⚪ Port 3000 freed
#
# [19:35:10] 🟢 Port 3000 occupied
#            PID: 23456, Process: node
#            Command: npm start

使用场景:

  • 调试端口占用问题
  • 监控服务重启
  • 观察进程生命周期

保护模式 ✨ NEW

防止误杀重要端口(如数据库):

# 保护端口
killport protect 5432   # 保护 PostgreSQL
killport protect 3306   # 保护 MySQL

# 列出所有保护端口
killport list-protected
# 输出:
# 🛡️  Protected Ports:
#    5432
#    3306

# 移除保护
killport unprotect 5432

# 尝试 kill 被保护的端口
killport 5432
# 输出:
# 🛡️  Port 5432 is protected and cannot be killed
#     Use 'killport unprotect 5432' to remove protection

保护端口会在以下场景生效:

  • 直接 kill: killport 5432
  • 批量 kill: killport 3000 5432 8080
  • 预设组: killport preset database
  • 开发模式: killport --dev
  • 交互式模式: killport (被保护的端口会显示 🛡️ 图标)

系统托盘模式 ✨ NEW

常驻系统托盘,快速管理端口:

System Tray Demo

# 启动系统托盘(默认后台运行)
killport tray

# 前台运行(用于调试)
killport tray --foreground

# 停止托盘
killport stop-tray

托盘功能:

  • 📊 实时显示当前占用的端口数量(菜单栏显示 "🔫 N")
  • 📋 查看活跃端口列表(最多显示20个,超出可点击"View All"查看全部)
  • ⚡ 每个端口支持右键操作:
    • ❌ Kill Process - 终止进程
    • 🛡️ Protect/Unprotect Port - 保护/取消保护端口
  • 🔍 端口搜索功能(直接打开搜索模式)
  • 🔄 智能刷新(每30秒自动检测,仅在有变化时更新UI)
  • 📦 预设组快捷操作(dev、frontend、backend、database等)
  • 🛡️ 显示保护端口列表
  • 🎯 快捷打开交互式模式
  • 🧹 快捷清理开发端口
  • 💡 使用文字显示,兼容性更好
  • 🚀 默认后台运行,不占用终端

托盘菜单示例:

🔄 Refresh
───────────────
📋 Active Ports
   Port 3000 - node (PID: 12345)
      ❌ Kill Process
      🛡️  Protect Port
   🛡️ Port 8080 - main (PID: 23456)  # 已保护的端口
      ❌ Kill Process
      🔓 Unprotect Port
   ...
   📋 View All 25 Ports  # 超过20个端口时显示
───────────────
📦 Presets
   dev
   frontend
   backend
   database
───────────────
🛡️  Protected Ports
   Port 5432
   Port 3306
───────────────
🔍 Search Ports        # 搜索端口
🎯 Interactive Mode
🧹 Clear Dev Ports
───────────────
ℹ️  About
❌ Quit

使用场景:

  • 后台常驻监控
  • 快速响应端口占用
  • 右键端口选择 Kill 或 Protect
  • 搜索特定端口或进程
  • 无需打开终端即可管理端口
  • 一键使用预设组清理端口
  • 适合开发者日常使用

操作说明:

  1. 查看端口: 点击托盘图标 "🔫 N" 查看端口列表
  2. 操作端口: 点击任意端口展开子菜单,选择 Kill 或 Protect
  3. 搜索端口: 点击 "🔍 Search Ports" 打开搜索模式
  4. 批量清理: 点击预设组(如 dev)一键清理
  5. 停止托盘: 运行 killport stop-tray 或从菜单选择 Quit

注意:

  • 系统托盘需要GUI环境支持(macOS/Windows/Linux桌面环境)
  • 默认自动后台运行,日志文件位于 ~/.killport-tray.log
  • 使用 killport stop-tray 停止托盘进程
  • 使用 --foreground 选项可以前台运行(用于调试)
  • 详细说明请参考 TRAY_GUIDE.md

高级用法

# 列出所有占用端口的进程
killport list

# 预览模式(不实际 kill)
killport 3000 --dry-run

# 强制 kill,跳过确认(适合脚本)
killport 3000 --yes

# 详细输出
killport 3000 --verbose

# 查看版本
killport --version

# 查看帮助
killport --help

🎯 使用场景

场景 1: 每天开发前清理端口

# 早上开始工作
killport --dev

# 或使用自定义预设
killport preset myproject

场景 2: 快速选择性 kill

# 启动交互式模式
killport

# 使用方向键选择
# 空格标记要 kill 的进程
# 按 x 执行

场景 3: 脚本中使用

#!/bin/bash
# 清理开发环境
killport --dev --yes

# 启动新服务
npm run dev

场景 4: 切换项目

# 从项目 A 切换到项目 B
killport preset project-a
# ... 启动项目 B

场景 5: 保护生产数据库

# 保护所有数据库端口
killport protect 5432   # PostgreSQL
killport protect 3306   # MySQL
killport protect 27017  # MongoDB

# 现在可以安心使用 --dev 或 preset,不会误杀数据库
killport --dev

场景 6: 调试端口占用

# 监控端口,观察服务重启
killport watch 3000

# 在另一个终端测试你的服务
# Watch 会实时显示端口占用变化

场景 7: 后台常驻管理

# 启动系统托盘
killport tray

# 托盘会显示端口数量,右键可快速 kill
# 适合开发者日常使用,无需频繁打开终端

📊 功能对比

工具 命令 跨平台 易记性 依赖
killport killport 3000
lsof + kill lsof -ti:3000 | xargs kill -9 ❌ (仅 Unix) lsof
netstat + taskkill netstat -ano | findstr :3000 ❌ (仅 Windows) netstat
npx kill-port npx kill-port 3000 ⚠️ Node.js
fuser fuser -k 3000/tcp ❌ (仅 Linux) fuser

🔧 工作原理

killport 使用平台特定的方法查找并 kill 进程:

  • Linux: 使用 lsofss 命令
  • macOS: 使用 lsof 命令
  • Windows: 使用 netstattaskkill

所有功能封装在统一的简单接口中。

❓ 常见问题

Q: 使用安全吗? A: 安全。killport 默认会显示进程信息并请求确认。使用 --yes 可跳过确认(适合 CI/CD)。

Q: 如果端口没被占用怎么办? A: killport 会提示 "Port 3000 is not in use" 并正常退出。

Q: 支持 Docker 容器吗? A: 支持,如果端口暴露在宿主机上。

Q: 可以在 Shell 脚本中使用吗? A: 当然!使用 killport 3000 --yes 跳过确认提示。

Q: 需要 root/管理员权限吗? A: 仅当要 kill 其他用户的进程时需要。kill 自己的进程不需要特殊权限。

🛠️ 开发

# 克隆仓库
git clone https://github.com/TNT-Likely/killport.git
cd killport

# 安装依赖
make deps

# 构建
make build

# 运行测试
make test

# 运行(带参数)
make run ARGS="3000"

# 构建所有平台
make build-all

# 格式化代码
make fmt

🤝 贡献

欢迎贡献!请随时提交 Pull Request。

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/amazing-feature)
  3. 提交更改 (git commit -m 'Add some amazing feature')
  4. 推送到分支 (git push origin feature/amazing-feature)
  5. 提交 Pull Request

📄 许可证

MIT © TNT-Likely


Made with ❤️ by developers, for developers

如果 killport 为你节省了时间,请给个 ⭐