实用工具:Windows端口被占用?手把手教你查询并释放端口

从管理员命令行讲起:如何用 netstat 或 PowerShell 精准定位监听端口背后的 PID,再用 taskkill/任务管理器结束进程并用二次探测确认释放;文末整理拒绝访问、系统 PID、占用反复出现等特例。


前言

日常开发和运维中,你是否经常遇到类似这样的报错:Port 80 is already in use?比如运行Streamlit、Tomcat、Nginx、Python Web服务时,端口被占用导致程序启动失败,让人束手无策。

今天就以Windows系统为例,结合「Streamlit运行80端口被占用」的实战场景,手把手教你快速定位、释放被占用的端口,小白也能轻松上手!

一、准备工作:以管理员身份打开命令行工具

操作端口和进程需要系统管理员权限,否则会提示「拒绝访问」,第一步先搞定权限:

  1. 按下 Win + R 快捷键,输入 cmd(或 powershell),回车调出命令行窗口;
  2. 右键命令行窗口标题栏,选择「以管理员身份运行」(也可直接在开始菜单搜索「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:图形化操作(任务管理器)

适合怕输命令的小伙伴:

  1. 按下 Ctrl + Shift + Esc 打开任务管理器;
  2. 切换到「详细信息」标签(Win10/11),若没看到「PID」列,右键表头→勾选「PID」;
    在这里插入图片描述
  3. 找到PID为XXXX的进程,右键→「结束任务」;
  4. 若提示「无法终止进程」,需右键任务管理器→「以管理员身份运行」。

四、步骤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


文章目錄

前言

日常開發和運維中,你是否經常遇到類似這樣的報錯:Port 80 is already in use?比如運行Streamlit、Tomcat、Nginx、Python Web服務時,端口被佔用導致程序啟動失敗,讓人束手無策。

今天就以Windows系統為例,結合「Streamlit運行80端口被佔用」的實戰場景,手把手教你快速定位、釋放被佔用的端口,小白也能輕鬆上手!

一、準備工作:以管理員身份打開命令行工具

操作端口和進程需要系統管理員權限,否則會提示「拒絕訪問」,第一步先搞定權限:

  1. 按下 Win + R 快捷鍵,輸入 cmd(或 powershell),回車調出命令行窗口;
  2. 右鍵命令行窗口標題欄,選擇「以管理員身份運行」(也可直接在開始菜單搜索「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:圖形化操作(任務管理器)

適合怕輸命令的小夥伴:

  1. 按下 Ctrl + Shift + Esc 打開任務管理器;
  2. 切換到「詳細信息」標籤(Win10/11),若沒看到「PID」列,右鍵表頭→勾選「PID」;
    在這裡插入圖片描述
  3. 找到PID為XXXX的進程,右鍵→「結束任務」;
  4. 若提示「無法終止進程」,需右鍵任務管理器→「以管理員身份運行」。

四、步驟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:

  1. Win + R → type cmd or powershell → Enter.
  2. 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

Insert image description here
Remember: 1234 is the PID on port 80.

Method 2: PowerShell (clearer)

Use PowerShell, not CMD:
Insert image description here
Run:

Get-NetTCPConnection -LocalPort 80 | Select-Object LocalPort,OwningProcess

Sample:

LocalPort OwningProcess
--------- -------------
       80          1234

Insert image description here

OwningProcess is the PID.

III. Step 2: kill the process, free the port

Replace 1234 with your PID:

taskkill /f /pid 1234

Insert image description here

Flags:

  • /f: force kill
  • /pid: target PID

Success:

成功: 已终止PID为 1234 的进程。

Port should be free.

Method 2: Task Manager

  1. Ctrl + Shift + EscDetails.
  2. If PID is hidden: right-click header → enable PID.
    Insert image description here
  3. Find the PID, right-click → End task.
  4. 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.