EADDRINUSE 端口被占用怎么解决?查进程、杀进程、换端口(3000/8080)
npm run dev 报 EADDRINUSE address already in use,是端口被上一个没关的进程占着。给出 macOS/Linux 和 Windows 查端口、杀进程、换端口的真实命令,以及怎么避免再次发生。
Published: 2026-06-03 / Updated: 2026-06-26
启动项目时报 Error: listen EADDRINUSE: address already in use :::3000,意思很简单:3000 端口已经被另一个进程占着了——通常是你上一个 npm run dev 没真正关掉,还在后台跑。
两条路解决:找到并杀掉占端口的进程,或者换一个端口。下面给两个系统的真实命令。
先确认是哪个端口
报错里 :::3000 或 :8080 那个数字就是被占的端口。常见的是 3000(Next.js / CRA)、5173(Vite)、8080、5000。
方法一:杀掉占端口的进程(macOS / Linux)
# 查谁占了 3000 端口
lsof -i :3000
# 直接拿到 PID 并杀掉
lsof -ti:3000 | xargs kill -9
kill -9 是强制结束,先用 lsof -i :3000 看清是不是自己的 dev 进程,别误杀别的服务。
方法二:杀掉占端口的进程(Windows)
# 查 PID(最后一列就是 PID)
netstat -ano | findstr :3000
# 按 PID 结束进程
taskkill /PID <上面查到的PID> /F
方法三:不杀进程,直接换端口
不想杀进程,换个端口起最省事:
# Next.js / 通用:用 PORT 环境变量
PORT=3001 npm run dev
# Next.js 也可以
npm run dev -- -p 3001
# Vite
npm run dev -- --port 3001
方法四:用 kill-port 一行搞定(跨平台)
npx kill-port 3000
不用记 lsof / netstat,npx kill-port 跨平台直接释放端口。
为什么会反复发生
- 关终端时进程没被一起结束(尤其后台
&启动的); - 用
Ctrl+Z挂起而不是Ctrl+C结束; - 同一个项目开了两个终端各起了一次 dev。
养成用 Ctrl+C 正常结束、一个项目只起一个 dev 的习惯,就能少踩。
让 Codex 辅助
我启动项目报 EADDRINUSE address already in use :::3000。
请给出我当前系统(macOS/Windows)下查占用进程和释放端口的命令,
杀进程前先告诉我怎么确认这个进程确实是我自己的 dev,别误杀。
风险提醒
kill -9/taskkill /F是强制结束,杀错会中断别的服务(数据库、其他项目)。先确认 PID 再杀。- 公司或服务器上的端口占用,可能是受管服务,别擅自杀,先确认归属和授权。
相关工具
相关报错排查
同一套排查思路的常见报错,建议一起看:
免责声明
本文命令对应 macOS / Linux / Windows 的标准行为,供学习和排查参考;在客户服务器或受管设备上操作端口和进程,需明确授权并人工复核。
读完后可以直接用的工具
根据这篇文章的主题自动匹配,先用工具做判断,再人工复核交付。
SEO path
Continue through the same topic network
Use a practical tool after reading this guide
先用工具做判断,再用模板整理交付。生成内容只能作为草稿,不要不审核就直接发给客户。
Related articles
需要人工协助配置或排错?
你可以先用本站工具和模板自助排查。若确实卡在 Codex、Claude Code、GitHub、Vercel 配置或客户需求判断上,可以通过联系页咨询。服务不是主业入口,只作为少量高价值人工协助保留。
联系我