下面是一份详细的 Windows 系统中排查 某端口(如 9018)被哪个程序占用 并确定其具体服务来源的完整教程,适合用于日常运维、开发部署排障等场景。
在命令行中执行:
netstat -ano | findstr :9018
输出示例:
TCP 0.0.0.0:9018 0.0.0.0:0 LISTENING 16044
TCP 127.0.0.1:9018 127.0.0.1:54680 ESTABLISHED 16044
表明端口
9018
正由进程号(PID)为16044
的进程占用。
执行命令:
tasklist /FI "PID eq 16044"
输出示例:
映像名称 PID 会话名 会话# 内存使用
========================= ======== ================ =========== ============
java.exe 16044 RDP-Tcp#33 2 454,692 K
可知是
java.exe
占用了该端口。
使用命令:
wmic process where ProcessId=16044 get CommandLine
或更详细的 PowerShell 命令:
Get-CimInstance Win32_Process -Filter "ProcessId = 16044" | Select-Object CommandLine,ExecutablePath
输出示例:
"E:\Program Files\Java\jdk1.8.0_201\bin\java.exe" -Djava.util.logging.config.file="F:\home\apache-tomcat-courtyard\conf\logging.properties" ... org.apache.catalina.startup.Bootstrap start
根据命令行中的内容,我们可以判断出:
F:\home\apache-tomcat-courtyard
F:\home\apache-tomcat-courtyard\conf\server.xml
打开配置文件:
F:\home\apache-tomcat-courtyard\conf\server.xml
搜索端口配置:
<Connector port="9018" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
说明 Tomcat 是通过这个 Connector 监听 9018 端口。
进入 Tomcat 的 webapps
目录:
F:\home\apache-tomcat-courtyard\webapps\
这里可能包含:
ROOT
目录(默认项目).war
文件(例如:myapp.war
、oa.war
、cms\
)这就是部署在该 Tomcat 上的实际应用。
F:\home\apache-tomcat-courtyard\bin\shutdown.bat
taskkill /PID 16044 /F
server.xml
中:<Connector port="9018" ... />
为:
<Connector port="9019" ... />
F:\home\apache-tomcat-courtyard\bin\shutdown.bat
F:\home\apache-tomcat-courtyard\bin\startup.bat
查看任务计划程序或启动项,确保没有将 Tomcat 设置为自动启动。
netstat 查端口 → 得到 PID → tasklist 查进程名
↓
是 java.exe → wmic / PowerShell 查启动命令
↓
判断是 Tomcat / Jar / IDE 启动项目
↓
定位配置 → 查看 server.xml → 确认端口来源