实用工具:Windows端口被占用?手把手教你查询并释放端口
从管理员命令行讲起:如何用 netstat 或 PowerShell 精准定位监听端口背后的 PID,再用 taskkill/任务管理器结束进程并用二次探测确认释放;文末整理拒绝访问、系统 PID、占用反复出现等特例。
前言
日常开发和运维中,你是否经常遇到类似这样的报错:Port 80 is already in use?比如运行Streamlit、Tomcat、Nginx、Python Web服务时,端口被占用导致程序启动失败,让人束手无策。
今天就以Windows系统为例,结合「Streamlit运行80端口被占用」的实战场景,手把手教你快速定位、释放被占用的端口,小白也能轻松上手!
一、准备工作:以管理员身份打开命令行工具
操作端口和进程需要系统管理员权限,否则会提示「拒绝访问」,第一步先搞定权限:
- 按下
Win + R快捷键,输入cmd(或powershell),回车调出命令行窗口; - 右键命令行窗口标题栏,选择「以管理员身份运行」(也可直接在开始菜单搜索「CMD」,右键选择「以管理员身份运行」)。
二、步骤1:精准定位占用端口的进程PID
端口被占用的本质是「某个进程抢占了该端口」,我们需要先找到这个进程的唯一标识——PID(进程ID)。
以Streamlit报错的「80端口」为例,分享两种查询方法:
方法1:经典netstat命令(通用所有Windows版本)
执行以下命令,直接过滤80端口的占用信息:
netstat -ano | findstr :80
命令参数解释:
-a:显示所有网络连接和监听端口;-n:以数字形式显示地址/端口(不解析域名,速度更快);-o:显示占用端口的进程PID;| findstr :80:过滤出仅80端口的结果。
示例输出:
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 1234

重点记住:1234 就是占用80端口的进程PID!
方法2:PowerShell命令(输出更清晰)
如果觉得netstat输出杂乱,可改用PowerShell专属命令:
打开PowerShell(注意不是CMD)

输入命令
Get-NetTCPConnection -LocalPort 80 | Select-Object LocalPort,OwningProcess
示例输出:
LocalPort OwningProcess
--------- -------------
80 1234

OwningProcess 列的数字就是我们需要的PID。
三、步骤2:结束进程,释放端口
找到PID后,两种方式可终止进程、释放端口,按需选择:
方法1:命令行一键终止(推荐)
执行以下命令(将1234替换为实际查到的PID):
taskkill /f /pid 1234

命令参数解释:
/f:强制终止进程(避免进程卡死无法结束);/pid:指定要终止的进程PID。
成功提示:
成功: 已终止PID为 1234 的进程。
此时端口已被释放!
方法2:图形化操作(任务管理器)
适合怕输命令的小伙伴:
- 按下
Ctrl + Shift + Esc打开任务管理器; - 切换到「详细信息」标签(Win10/11),若没看到「PID」列,右键表头→勾选「PID」;

- 找到PID为
XXXX的进程,右键→「结束任务」; - 若提示「无法终止进程」,需右键任务管理器→「以管理员身份运行」。
四、步骤3:验证端口是否释放
再次执行步骤1的查询命令:
netstat -ano | findstr :80
如果无任何输出,说明80端口已成功释放!
此时重新运行Streamlit命令:
streamlit run ./AICLD.py --server.port 80
程序就能正常启动了。
五、常见问题解决(避坑指南)
1. 提示「拒绝访问」?
→ 核心原因:未以管理员身份运行命令行/任务管理器!重新以管理员身份打开即可。
2. PID显示为4(系统进程)?
→ 原因:80端口被Windows自带的HTTP.sys服务占用(IIS、远程桌面等依赖该服务);
→ 解决:执行以下命令停止/禁用该服务:
# 停止HTTP服务
net stop http
# (可选)禁用HTTP服务,避免重启后再次占用
sc config http start= disabled
执行后会提示「是否停止依赖服务」,输入Y确认即可。
3. 执行taskkill后端口仍被占用?
→ 原因:进程卡死,命令行无法终止;
→ 解决:重启电脑(终极方案,重启后所有进程重置,端口必释放)。
六、补充建议:换端口更省心
如果80端口长期被占用,没必要每次都释放,直接修改程序运行端口更高效!
比如将Streamlit改到8080端口:
streamlit run ./AICLD.py --server.port 8080
访问时在浏览器输入 http://localhost:8080 即可,简单又省心。
七、总结
本文以Streamlit占用80端口的场景为例,讲解了Windows系统「查询端口占用→结束进程→释放端口」的完整流程,这套方法适用于8080、3306、8000等所有常用端口。
最后小提醒:结束进程前,确认该进程不是系统关键进程(比如PID=4的HTTP服务),避免影响系统正常运行。
下次再遇到端口被占用的报错,再也不用慌啦!
實用工具:Windows端口被佔用?手把手教你查詢並釋放端口
以系統管理者 CLI 為主線:先用 netstat 或 PowerShell 找出占用埠的 PID,再以 taskkill 或「工作管理員」結束處理程序並複查監聽連接是否已釋放,並附上「拒絕存取」等特例解法。
來源:https://blog.csdn.net/2403_87969572/article/details/155783297
抓取時間(ISO本地):2026-05-18 05:17:15
文章目錄
- 前言
- 一、準備工作:以管理員身份打開命令行工具
- 二、步驟1:精準定位佔用端口的進程PID
- 三、步驟2:結束進程,釋放端口
- 四、步驟3:驗證端口是否釋放
- 五、常見問題解決(避坑指南)
- 六、補充建議:換端口更省心
- 七、總結
前言
日常開發和運維中,你是否經常遇到類似這樣的報錯:Port 80 is already in use?比如運行Streamlit、Tomcat、Nginx、Python Web服務時,端口被佔用導致程序啟動失敗,讓人束手無策。
今天就以Windows系統為例,結合「Streamlit運行80端口被佔用」的實戰場景,手把手教你快速定位、釋放被佔用的端口,小白也能輕鬆上手!
一、準備工作:以管理員身份打開命令行工具
操作端口和進程需要系統管理員權限,否則會提示「拒絕訪問」,第一步先搞定權限:
- 按下
Win + R快捷鍵,輸入cmd(或powershell),回車調出命令行窗口; - 右鍵命令行窗口標題欄,選擇「以管理員身份運行」(也可直接在開始菜單搜索「CMD」,右鍵選擇「以管理員身份運行」)。
二、步驟1:精準定位佔用端口的進程PID
端口被佔用的本質是「某個進程搶佔了該端口」,我們需要先找到這個進程的唯一標識——PID(進程ID)。
以Streamlit報錯的「80端口」為例,分享兩種查詢方法:
方法1:經典netstat命令(通用所有Windows版本)
執行以下命令,直接過濾80端口的佔用信息:
netstat -ano | findstr :80
命令參數解釋:
-a:顯示所有網絡連接和監聽端口;-n:以數字形式顯示地址/端口(不解析域名,速度更快);-o:顯示佔用端口的進程PID;| findstr :80:過濾出僅80端口的結果。
示例輸出:
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 1234

重點記住:1234 就是佔用80端口的進程PID!
方法2:PowerShell命令(輸出更清晰)
如果覺得netstat輸出雜亂,可改用PowerShell專屬命令:
打開PowerShell(注意不是CMD)

輸入命令
Get-NetTCPConnection -LocalPort 80 | Select-Object LocalPort,OwningProcess
示例輸出:
LocalPort OwningProcess
--------- -------------
80 1234

OwningProcess 列的數字就是我們需要的PID。
三、步驟2:結束進程,釋放端口
找到PID後,兩種方式可終止進程、釋放端口,按需選擇:
方法1:命令行一鍵終止(推薦)
執行以下命令(將1234替換為實際查到的PID):
taskkill /f /pid 1234

命令參數解釋:
/f:強制終止進程(避免進程卡死無法結束);/pid:指定要終止的進程PID。
成功提示:
成功: 已終止PID為 1234 的進程。
此時端口已被釋放!
方法2:圖形化操作(任務管理器)
適合怕輸命令的小夥伴:
- 按下
Ctrl + Shift + Esc打開任務管理器; - 切換到「詳細信息」標籤(Win10/11),若沒看到「PID」列,右鍵表頭→勾選「PID」;

- 找到PID為
XXXX的進程,右鍵→「結束任務」; - 若提示「無法終止進程」,需右鍵任務管理器→「以管理員身份運行」。
四、步驟3:驗證端口是否釋放
再次執行步驟1的查詢命令:
netstat -ano | findstr :80
如果無任何輸出,說明80端口已成功釋放!
此時重新運行Streamlit命令:
streamlit run ./AICLD.py --server.port 80
程序就能正常啟動了。
五、常見問題解決(避坑指南)
1. 提示「拒絕訪問」?
→ 核心原因:未以管理員身份運行命令行/任務管理器!重新以管理員身份打開即可。
2. PID顯示為4(系統進程)?
→ 原因:80端口被Windows自帶的HTTP.sys服務佔用(IIS、遠程桌面等依賴該服務);
→ 解決:執行以下命令停止/禁用該服務:
# 停止HTTP服務
net stop http
# (可選)禁用HTTP服務,避免重啟後再次佔用
sc config http start= disabled
執行後會提示「是否停止依賴服務」,輸入Y確認即可。
3. 執行taskkill後端口仍被佔用?
→ 原因:進程卡死,命令行無法終止;
→ 解決:重啟電腦(終極方案,重啟後所有進程重置,端口必釋放)。
六、補充建議:換端口更省心
如果80端口長期被佔用,沒必要每次都釋放,直接修改程序運行端口更高效!
比如將Streamlit改到8080端口:
streamlit run ./AICLD.py --server.port 8080
訪問時在瀏覽器輸入 http://localhost:8080 即可,簡單又省心。
七、總結
本文以Streamlit佔用80端口的場景為例,講解了Windows系統「查詢端口占用→結束進程→釋放端口」的完整流程,這套方法適用於8080、3306、8000等所有常用端口。
最後小提醒:結束進程前,確認該進程不是系統關鍵進程(比如PID=4的HTTP服務),避免影響系統正常運行。
下次再遇到端口被佔用的報錯,再也不用慌啦!
Practical Tools: Windows Port in Use? Find What’s Holding It and Free It—Step by Step
Windows port triage playbook: escalate to admin shells, map LISTEN rows to owning PIDs, end them with taskkill or Task Manager, re-probe sockets, plus notes on access denied, PID 4, and phantom listeners.
Captured at (local ISO): 2026-05-18 05:17:15
Preface
Ever hit Port 80 is already in use? Streamlit, Tomcat, Nginx, Python web apps… a grabbed port stops cold starts. Frustrating.
On Windows, using Streamlit on 80 as the story, here’s how to locate, terminate, and verify—friendly for beginners.
I. Prep: open an elevated shell
Port and process work needs Administrator rights or you’ll get access denied:
Win + R→ typecmdorpowershell→ Enter.- Right-click the title bar → Run as administrator (or Start → CMD → right-click → Run as administrator).
II. Step 1: find the PID on the port
A busy port means some process owns it; we need its PID.
Method 1: classic netstat (all Windows versions)
Filter port 80:
netstat -ano | findstr :80
Flags:
-a: all connections and listening ports-n: numeric addresses (faster)-o: show owning PID| findstr :80: keep lines mentioning:80
Sample:
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 1234

Remember: 1234 is the PID on port 80.
Method 2: PowerShell (clearer)
Use PowerShell, not CMD:

Run:
Get-NetTCPConnection -LocalPort 80 | Select-Object LocalPort,OwningProcess
Sample:
LocalPort OwningProcess
--------- -------------
80 1234

OwningProcess is the PID.
III. Step 2: kill the process, free the port
Method 1: CLI (recommended)
Replace 1234 with your PID:
taskkill /f /pid 1234

Flags:
/f: force kill/pid: target PID
Success:
成功: 已终止PID为 1234 的进程。
Port should be free.
Method 2: Task Manager
Ctrl + Shift + Esc→ Details.- If PID is hidden: right-click header → enable PID.

- Find the PID, right-click → End task.
- If blocked, reopen Task Manager as administrator.
IV. Step 3: confirm the port is free
Run the discovery command again:
netstat -ano | findstr :80
No output → port 80 is free.
Restart Streamlit:
streamlit run ./AICLD.py --server.port 80
V. FAQ / pitfalls
1. “Access denied”?
→ Shell or Task Manager not elevated—run as administrator.
2. PID 4?
→ Often HTTP.sys (IIS, RDP helpers). Stop/disable:
# 停止HTTP服务
net stop http
# (可选)禁用HTTP服务,避免重启后再次占用
sc config http start= disabled
Answer Y if prompted about dependent services.
3. taskkill but port still busy?
→ Hung process—reboot is the blunt fix (resets everything).
VI. Tip: pick another port
If 80 is always contested, use 8080:
streamlit run ./AICLD.py --server.port 8080
Browse http://localhost:8080.
VII. Wrap-up
Using Streamlit :80 as the narrative, we covered find PID → kill → verify—same recipe for 8080, 3306, 8000, etc.
Before killing: confirm it’s not a critical system path (PID 4 / HTTP.sys).
Next time “port in use” pops up—you’ve got a playbook.