直接用 lsof -i :端口号 就能快速定位——这是 macos 终端排查开发端口(如 3000、5001、8080、3001)最常用、最可靠的方式,输出含 command 和 pid,可精准识别占用进程;需查 listen 状态时加 -stcp:listen,批量查多端口可用多个 -i 参数,仅取 pid 则加 -t。
直接用 lsof -i :端口号 就能快速定位——这是 macos 终端排查开发端口(比如 3000、5001、8080、3001)最常用、最可靠的方式。
查指定端口谁在用(推荐单条命令)
在终端输入:
lsof -i :3000(把 3000 换成你要查的实际端口)
如果被占用,会输出类似:
COMMAND PID USER FD TYPE NAME
node 12345 yourname 21u IPv6 *:3000 (LISTEN)
重点关注 PID(进程号)和 COMMAND(进程名),它们告诉你哪个程序占着端口。
多数开发端口(如 3000、5000、8080)普通用户就能查到;若没结果但你确定有服务在跑,加 sudo 再试一次:sudo lsof -i :8080
只看真正监听的 TCP 服务(避免干扰)
默认 lsof -i :端口 可能返回已建立的连接(ESTABLISHED),而非正在“守着端口等请求”的服务。开发中更关心的是 LISTEN 状态:
lsof -iTCP -sTCP:LISTEN | grep :3000- 输出干净,只列监听该端口的服务进程
- 配合
-P -n跳过 DNS 解析,更快更直观:lsof -P -n -iTCP -sTCP:LISTEN | grep :5001
批量查多个开发端口是否空闲
启动项目前想一口气确认几个端口有没有冲突?可以连写多个 -i 参数:
lsof -i :3000 -i :5000 -i :8000
有输出 = 被占;完全没输出 = 这几个端口当前都空闲。
如果只想快速拿到 PID(方便后续 kill),加 -t 参数:
lsof -t -i :3000 → 直接返回数字,比如 12345
再执行:kill -9 12345 就能立刻释放端口。
辅助验证:用 netstat 全局扫一遍 LISTEN 端口
适合不确定具体端口,或想交叉验证时使用:
- 列出所有监听中的 TCP 端口:
netstat -an | grep LISTEN - 过滤含 3000 的行:
netstat -an | grep LISTEN | grep :3000 - 看到
*:3000或127.0.0.1:3000且状态为 LISTEN,就确认被监听了











