lsoff 是一款基于 Go 语言开发的命令行(CLI)和文本用户界面(TUI)工具,专为在 Windows、Linux 和 macOS 上快速排查端口占用问题而设计。它被视为专注于端口的 lsof 替代品,能够直接读取系统底层 API,无需依赖外部命令(如 netstat 或 ss),提供极速的进程定位、搜索及终止功能。

核心功能
- 🚀 零依赖原生实现:
- Linux:直接解析
/proc/net/和/proc/<pid>/文件。 - macOS:调用
libproc和sysctl。 - Windows:使用 IP Helper API 及
NtQueryInformationProcess。 - 不依赖
lsof、ss或netstat,启动速度极快且输出稳定。
- Linux:直接解析
- 🖥️ 交互式 TUI 界面:
- 支持键盘导航(Vim 风格
j/k)、鼠标点击、列排序及实时搜索。 - 自动折叠同一 PID 的多套接字(IPv4/IPv6),保持界面整洁。
- 颜色区分协议(TCP 绿色,UDP 琥珀色)。
- 支持键盘导航(Vim 风格
- 🔍 强大的搜索与过滤:
- 支持按端口、PID、进程名、路径、命令行参数甚至项目名进行搜索。
- 支持空格分隔的 AND 逻辑查询(如
-q "node 8080")。 - 支持 JSON 格式输出,便于脚本集成。
- ⚡ 安全进程终止:
- 内置确认机制,防止误杀。
- 防 PID 复用保护:在终止前验证进程创建时间或句柄,确保杀死的是目标进程而非新复用的 PID(Linux 使用
pidfd_open,Windows 检查CreationTime)。 - Unix 系统采用“先 SIGTERM,后 SIGKILL”的优雅终止策略。
快速用法
# 启动 TUI 界面(默认)
lsoff
# 查询特定端口占用的进程
lsoff 8080
# 按进程名或路径搜索
lsoff nginx
# 组合搜索(AND 逻辑)
lsoff -q "node 8080"
# 仅查看 TCP 或 UDP
lsoff -t # TCP
lsoff -u 53 # UDP 端口 53
# 终止占用端口的进程(带确认)
lsoff -k 8080
# 强制终止(跳过确认,适合管道操作)
lsoff -k -y 8080
# 输出 JSON 格式
lsoff --json nginx
TUI 快捷键指南
| 按键 | 功能 |
|---|---|
/ 或 Ctrl+f | 打开搜索框(支持空格 AND 逻辑) |
j / k / ↑ / ↓ | 上下移动选择 |
Enter / Space | 展开/折叠同一 PID 的套接字详情 |
s / S | 切换排序列 / 切换升序降序 |
x | 终止选中进程(需二次确认 y/n) |
a | 开启每 2 秒自动刷新 |
y | 复制选中的 addr:port |
r | 手动重新加载数据 |
q | 退出程序 |
技术细节与限制
- 权限要求:若未以 root/Administrator 运行,部分进程的详细信息(如完整命令行、工作目录)可能无法获取。
- macOS 原子性:由于 macOS 缺乏类似 Linux
pidfd的机制,终止操作存在极微小的 PID 复用窗口期,但工具已通过检查pbi_start_tvsec尽量降低风险。 - Windows WOW64:32 位版本的
lsoff无法获取 64 位进程的完整命令行信息。 - UDP 状态:UDP 无
LISTEN状态,工具会显示绑定到端口且无远程对端的套接字。










