如何查看 Windows 中哪个进程占用了端口

简短回答: netstat -ano 会列出端口和 PID,再用任务管理器把 PID 翻译成程序。像端口占用查看这样的免费工具替你完成两半工作——所有端口连同进程名的可搜索列表,一键即达。

方法 1:netstat + 任务管理器(内置)

  1. 按 Win + R,输入 cmd,回车。
  2. 找到端口占用者:
    netstat -ano | findstr :8080
    
    该行最后一个数字就是 PID。
  3. 打开任务管理器 → 详细信息,找到对应这个 PID 的行。

到处都能用,但每一步都要手动:正确的过滤字符串、从几十行 IPv6 记录下面挖出 PID,再去第二个工具里找。

方法 2:端口占用查看——带进程名的可搜索列表

端口占用查看执行同样的 netstat,把 PID 与进程列表对应起来并展示成表格:

  • 先看监听端口——真正「占住」端口的正是它们。
  • 搜索框——输入 8080、node 或 PID,列表立即缩小。
  • 复制按钮——把「TCP :8080 — node.exe (1234)」放进剪贴板,直接用于 bug 报告。
  • 「所有连接」开关——需要完整画面时加入已建立的套接字。

应用只做读取:不阻止、不修改、不结束任何东西。要真正释放端口,请在任务管理器中结束所属进程。

免费下载 — PortOwner-Setup.exe

如何读懂结果

  • 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);是一个程序、两行记录。