最新

Windows 怎么查看端口占用

本地服务起不来、装软件提示端口被占用,先要查清是谁占着这个口。这篇讲命令和图形界面两种查法、怎么安全结束进程,以及查到系统进程占用时怎么办。

本地服务起不来、装软件提示端口被占用,第一件事是查清谁占着这个口。Windows 自带命令和图形工具都能查,不用装任何软件。这篇讲两种查法、怎么安全地结束进程,以及查不到进程名时该怎么办。

入口在哪

最快的入口是命令提示符。按 Win 键输入 cmd 回车,或者按 Win+R 输入 cmd 回车都能打开。查端口不需要管理员权限,但结束进程时需要。

图形化的入口是资源监视器:按 Win+R 输入 resmon 回车,切到「网络」选项卡,下面有「侦听端口」和「TCP 连接」两张表,能直接看到端口对应的进程名。

还有一个是任务管理器。在「详细信息」选项卡里能看到每个进程的编号,用来和命令行查出来的编号对照,比盯着进程名找直观得多。

具体步骤

  1. 先确定端口号。报错信息里通常会写,比如 8080、3306、5432;没写就按服务的默认端口猜,再到它的配置文件里核对。
  2. 在命令提示符里输入 netstat -ano | findstr :8080 回车。结果最后一列是进程编号,倒数第二列是连接状态。
  3. 只看真正占着口的行。状态是 LISTENING 的才是程序在等着别人连,其他状态多半是已经断开的连接残留。
  4. 拿编号去查进程。在任务管理器切到「详细信息」,按编号列排序找到对应行,就能看到进程名和路径。
  5. 确认是哪个程序之后再决定。自己装的软件可以直接结束,系统进程绝对不要动。
  6. 要结束就输入 taskkill /PID 1234 /F,把 1234 换成查到的编号。提示权限不足时,用管理员身份重新打开命令提示符再执行。
  7. 想少绕两步可以用 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 找到占着端口的编号,再去任务管理器确认是哪个程序,确认无风险再结束,查不到就换端口。