window 端口占用但是查不到

Posted on 2026-03-03 17:05  笔名钟意  阅读(0)  评论(0)    收藏  举报

错误情景

  • 系统:
    • window11
    • docker run in wsl
  • 操作:
    • idea run nacos

错误诱因

Window 默认预留的 TCP 动态端口范围与需要启动的服务端口冲突导致。

所以查不来的原因是端口确实未使用,但是保留。

解决方案

  1. 查看windows保留端口序列是否在冲突范围,默认应该是1024开始,步长为13977。所以我nacos的8848、9848都在里面
netsh int ipv4 show dynamicport tcp
  1. 修改端口默认起始与步长,设置为自己不常用的区间。
  • start: 起始值
  • num: 长度
netsh int ipv4 set dynamicport tcp start=30000 num=13977

结尾

分享一个如果端口存在就kill端口的命令 e.g. killIf 8848

function killIf {
    param (
        [Parameter(Mandatory = $true)]
        [int]$Port,

        [switch]$l
    )

    try {
        # 获取 netstat 输出并过滤与端口相关的信息
        $processInfo = netstat -ano | Select-String -Pattern ":\b${Port}\b"

        # 判空处理
        if ($null -eq $processInfo -or $processInfo.Length -eq 0) {
            Write-Host "端口 $Port 未被占用。" -ForegroundColor Yellow
            Write-Host "提示:无法使用该端口,请检查是否有其他服务在使用,或尝试重启电脑。" -ForegroundColor Green
            return
        }

        # 提取唯一的进程ID
        $processIds = $processInfo | ForEach-Object { ($_ -split '\s+')[-1] } | Select-Object -Unique

        foreach ($ProcId in $processIds) {
            try {
                # 确认 PID 是否为有效的数字
                if ($ProcId -match '^\d+$') {
                    if ($l) {
                        Write-Host "端口 $Port 存在进程号: ${ProcId}" -ForegroundColor Yellow
                    }
                    # 尝试终止进程
                    taskkill /PID $ProcId /F
                    Write-Host "已终止进程 ${ProcId}, 释放端口 $Port 完毕。" -ForegroundColor Green
                } else {
                    Write-Host "不正确的进程号: ${ProcId}" -ForegroundColor Red
                }
            }
            catch {
                Write-Host "终止进程 ${ProcId} 失败: $($_.Exception.Message)" -ForegroundColor Red
            }
        }
    }
    catch {
        Write-Host "发生错误: $($_.Exception.Message)" -ForegroundColor Red
    }
}

它是一个​PowerShell 脚本​(扩展名为 .ps1),放到 $PROFILE 这个变量下面就行,直接在命令行输入 $PROFILE 有地址。