Windows 怎么查看端口占用
本地服务起不来、装软件提示端口被占用,先要查清是谁占着这个口。这篇讲命令和图形界面两种查法、怎么安全结束进程,以及查到系统进程占用时怎么办。
本地服务起不来、装软件提示端口被占用,第一件事是查清谁占着这个口。Windows 自带命令和图形工具都能查,不用装任何软件。这篇讲两种查法、怎么安全地结束进程,以及查不到进程名时该怎么办。
入口在哪
最快的入口是命令提示符。按 Win 键输入 cmd 回车,或者按 Win+R 输入 cmd 回车都能打开。查端口不需要管理员权限,但结束进程时需要。
图形化的入口是资源监视器:按 Win+R 输入 resmon 回车,切到「网络」选项卡,下面有「侦听端口」和「TCP 连接」两张表,能直接看到端口对应的进程名。
还有一个是任务管理器。在「详细信息」选项卡里能看到每个进程的编号,用来和命令行查出来的编号对照,比盯着进程名找直观得多。
具体步骤
- 先确定端口号。报错信息里通常会写,比如 8080、3306、5432;没写就按服务的默认端口猜,再到它的配置文件里核对。
- 在命令提示符里输入
netstat -ano | findstr :8080回车。结果最后一列是进程编号,倒数第二列是连接状态。 - 只看真正占着口的行。状态是 LISTENING 的才是程序在等着别人连,其他状态多半是已经断开的连接残留。
- 拿编号去查进程。在任务管理器切到「详细信息」,按编号列排序找到对应行,就能看到进程名和路径。
- 确认是哪个程序之后再决定。自己装的软件可以直接结束,系统进程绝对不要动。
- 要结束就输入
taskkill /PID 1234 /F,把 1234 换成查到的编号。提示权限不足时,用管理员身份重新打开命令提示符再执行。 - 想少绕两步可以用 PowerShell:
Get-NetTCPConnection -LocalPort 8080直接给出占用的进程,再用Get-Process -Id 进程号查名字。
几个坑
- 用
findstr :80会把 8080、18080 一起匹配出来,看着像 80 被占用。查位数少的端口时,条件里要带上空格,或者干脆用 PowerShell 按端口精确查。 - 编号是十进制的,别当成十六进制。命令行和任务管理器里的编号是同一个数,对不上多半是看错了列。
- 状态是 TIME_WAIT 的连接也会出现在结果里。它不是程序还占着口,而是连接刚断开、系统在等超时,一般几分钟自己消失,不用处理。
- 查到占用者是系统进程,或者编号是 4,多半是系统保留。虚拟化功能会预留整段端口,普通程序撞上只能换端口,硬结束会影响虚拟网络和已经起来的虚拟机。
- UDP 端口要单独看。结果里 UDP 那几行没有状态列,只有编号,查法完全一样。
- 结束进程可能丢数据。数据库、正在写文件的服务被强杀可能损坏,动手前先看清进程名和路径。
- 查到了也不急着杀。同一个程序多个实例里,可能只是上一次启动的残留,先正常退出再查,往往就空了。
怎么验证
- 把同一条命令再跑一遍,结果里不再出现那个端口,说明已经释放。
- 重新启动之前的服务,看它能不能正常绑定端口、正常访问。
- 用
Test-NetConnection -ComputerName 127.0.0.1 -Port 8080测连通性,能连上说明确实有程序在听。 - 如果换了端口,记得同步改客户端或浏览器的地址,否则会出现服务起来却连不上的错觉。
常见问题
查不到进程名怎么办
普通模式只给编号,不给名字,需要拿去任务管理器对照。也可以用 netstat -anob,它会把进程名直接列出来,代价是需要管理员权限,而且速度慢一些。
程序已经关了端口还占着
先看状态是 TIME_WAIT 还是 CLOSE_WAIT。前者等几分钟会自己消失;后者通常是程序异常退出留下的,重启电脑最省事,也可以在任务管理器里找同名残留进程结束掉。
能不能直接换个端口
能,而且常常比结束进程更安全。改配置文件或启动参数里的端口号,避开被占用的那个,再确认防火墙放行了新端口即可。
一句话总结:先用 netstat -ano 找到占着端口的编号,再去任务管理器确认是哪个程序,确认无风险再结束,查不到就换端口。