Windows下查端口占用进程:先用netstat -ano | findstr ":端口号"获取PID,再用tasklist | findstr "PID"查进程名;PowerShell可用Get-NetTCPConnection -LocalPort 端口号直接显示端口、PID及进程名。

当程序启动失败并提示“端口已被占用”时,必须立即确认是哪个进程正在监听或连接该端口,否则无法继续调试或部署服务。
用CMD命令快速定位端口归属进程
这一步操作起来很简单,直接在命令提示符里敲几行命令就能拿到PID和进程名。
按下 Win + R,输入 cmd 回车,打开命令提示符。
输入 netstat -ano | findstr ":8080"(把8080换成你要查的实际端口号),回车执行。注意冒号不能省略,否则IPv6地址匹配会失效,【漏掉冒号可能导致查不到结果】。
输出行末尾的数字就是PID,比如显示 127.0.0.1:8080 0.0.0.0:0 LISTENING 12345,那么PID是12345。
紧接着输入 tasklist | findstr "12345",回车后就能看到进程名,例如 java.exe 或 node.exe。
用PowerShell一步查出端口+进程名
适合不想手动查两次PID的用户,尤其当你不确定是否要以管理员身份运行时——这条命令在普通权限下也能返回大多数用户级进程。
方法一:以管理员身份运行 PowerShell(右键开始菜单 → Windows Terminal(管理员))
输入:Get-NetTCPConnection -LocalPort 8080 | ForEach-Object { $p = $_.OwningProcess; [PSCustomObject]@{Port=$_.LocalPort; ProcessName=(Get-Process -Id $p -ErrorAction SilentlyContinue).Name; PID=$p} }
回车后直接显示端口、进程名、PID三列信息,无需中转。如果返回空,说明该端口当前未被TCP监听。
方法二:若只查UDP端口,把 Get-NetTCPConnection 换成 Get-NetUDPEndpoint,参数不变。
用资源监视器图形化验证
这是最直观的方式,特别适合刚接触Windows系统或需要向同事演示排查过程的人。
第一步:按 Ctrl + Shift + Esc 打开任务管理器 → 切换到“性能”选项卡 → 点击底部“打开资源监视器”。
第二步:切换到“网络”选项卡 → 滚动到底部“监听端口”表格。
第三步:在“本地端口”列手动查找目标数字,对应“进程”列即为占用者,例如 chrome.exe 或 svchost.exe。
第四步:右键该行 → 选择“在任务管理器中显示”,可直接跳转到详细信息页排序查看。
注意:资源监视器默认不显示PID列,但你不需要它——“进程”列已足够识别;若看到 svchost.exe,说明端口由Windows服务托管,需进一步用 tasklist /svc /fi "pid eq XXXX" 查具体服务名。
确认非关键进程后强制释放端口
只有在明确知道该进程可安全终止时才执行此步,否则可能影响系统功能。
在命令提示符中输入:taskkill /F /PID 12345(将12345替换为实际PID)。
或者更粗暴但有时更有效:taskkill /F /IM java.exe(适用于多个同名进程且全部需关闭)。
【/F 参数不可省略,否则仅发送正常退出信号,部分进程会忽略】


















