Windows Server 上 80 端口被 PID=4 的 System 进程占用,实为 HTTP.sys 托管的系统服务(如 IIS、WinRM、BranchCache、SQL Server Reporting Services)所致;需通过 netstat 和 tasklist 定位具体服务,再停用或重配;若仍被占,可禁用 HTTP.sys 或改用其他端口部署。
win
dows server 上部署 web 应用(如 tomcat、apache 或 nginx)时提示 80 端口被占用,通常不是某个普通应用在抢端口,而是系统级服务默认监听了它——最常见的是 pid=4 的
system
进程。这不是用户能直接结束的进程,必须定位背后的实际服务并针对性处理。
确认谁在真正占用 80 端口
以管理员身份运行命令提示符,执行以下两步:
netstat -ano | findstr :80
—— 查看监听 80 端口的 PID(大概率是 4)
tasklist /svc /fi "PID eq 4"
—— 查看 PID=4 关联的服务名(注意不是“System”本身,而是它托管的 HTTP.sys 驱动所承载的服务)
输出中常出现的服务包括:
W3SVC(IIS)、WinRM、BranchCache、SQL Server Reporting Services
。这些才是真正的“占用者”。
停用或重配常见系统服务
根据上一步查到的具体服务,选择对应操作:
ClawUsage Windows Hardlock
通过聊天(Telegram / 飞书)执行本地 `clawusage` 监控命令。当用户输入 `/clawusage ...`,或提出“查看 Codex 用量”、“开启/关闭自动…”等请求时触发使用。
下载
IIS(World Wide Web Publishing Service)
:若不用 IIS,进「服务」管理器(services.msc)停止
World Wide Web Publishing Service
,并设为“禁用”;或运行
net stop w3svc
SQL Server Reporting Services
:找到服务名如
SQLServerReportingServices
或
ReportServer
,停止并设为“禁用”(该服务常随 SQL Server Express 自启,易反复占 80)
WinRM(Windows Remote Management)
:不建议直接禁用(影响远程管理),可改端口:运行
winrm set winrm/config/listener?Address=*+Transport=HTTP @{Port="5985"}
,再重启 WinRM 服务
BranchCache
:若非企业内网分发场景,直接在服务中禁用即可
关闭 HTTP.sys 驱动(治本但需谨慎)
如果以上服务都已停用,80 端口仍被占,说明底层 HTTP 协议栈(HTTP.sys)仍在监听。这是 System 进程托管的核心机制:
运行
net stop http /y
强制卸载 HTTP.sys 驱动(会同时停掉所有依赖它的服务)
永久禁用:执行
sc config http start= disabled
,然后重启服务器
⚠️ 注意:禁用后 IIS、WinRM HTTP 模式、.NET Core Kestrel 的
等将不可用,仅推荐纯自托管(如 Nginx 反代、Tomcat 直连)环境使用
临时释放或换端口部署(快速上线首选)
若需立即启动应用且无法停系统服务,两个低风险方案:
改用其他端口
:Tomcat 改
中 Connector 的 port="8080";Nginx 改
;Apache 改
。再配反向代理或防火墙端口转发
保留 80 端口但让渡给你的应用
:停掉 IIS 后,用
netsh http add urlacl url=http://+:80/ user=Everyone
授予你的应用监听权限(适用于 .NET Core 等基于 HTTP.sys 的程序)
UseHttpSys()server.xmllisten 8080;Listen 8080