如何查看 Windows 中哪个进程占用了端口
简短回答: netstat -ano 会列出端口和 PID,再用任务管理器把 PID 翻译成程序。像端口占用查看这样的免费工具替你完成两半工作——所有端口连同进程名的可搜索列表,一键即达。
方法 1:netstat + 任务管理器(内置)
- 按 Win + R,输入
cmd,回车。 - 找到端口占用者:
该行最后一个数字就是 PID。netstat -ano | findstr :8080 - 打开任务管理器 → 详细信息,找到对应这个 PID 的行。
到处都能用,但每一步都要手动:正确的过滤字符串、从几十行 IPv6 记录下面挖出 PID,再去第二个工具里找。
方法 2:端口占用查看——带进程名的可搜索列表
端口占用查看执行同样的 netstat,把 PID 与进程列表对应起来并展示成表格:
- 先看监听端口——真正「占住」端口的正是它们。
- 搜索框——输入
8080、node或 PID,列表立即缩小。 - 复制按钮——把「TCP :8080 — node.exe (1234)」放进剪贴板,直接用于 bug 报告。
- 「所有连接」开关——需要完整画面时加入已建立的套接字。
应用只做读取:不阻止、不修改、不结束任何东西。要真正释放端口,请在任务管理器中结束所属进程。
如何读懂结果
- LISTENING——程序正在该端口等待连接。正是这些记录导致「port already in use」。
- ESTABLISHED——此刻活跃的连接;它没有阻塞任何东西。
- UDP 记录没有状态——这很正常,UDP 无连接。
- PID 4 / System——内核驱动(通常是 445 端口的 SMB 或 135 端口的 RPC);没有什么需要修。
典型场景
启动开发服务器时「port 8080 is already in use」。 搜索 8080——通常上次会话遗留的 node.exe/java.exe。在任务管理器中结束它。
游戏或服务「cannot bind」端口。 检查是否另有程序在那里监听;对比两个实例。
陌生的监听。 先弄清所属进程再担心——十有八九是 Windows 服务。
FAQ
有 PowerShell 的方法吗?
有:Get-NetTCPConnection -LocalPort 8080 会显示所属 PID;进程名仍需 Get-Process -Id。查看类应用可以省掉这两步。
不用任务管理器能释放端口吗?
在 cmd 里 taskkill /PID 1234 可以——但先核对进程名;结束错误的进程可能让你丢失未保存的工作。
为什么同一个端口出现两次,IPv4 和 IPv6?
程序常同时监听两个协议栈(0.0.0.0:8080 和 [::]:8080);是一个程序、两行记录。