首页 > 综合 > 正文

命令行怎么查看端口占用?Windows、macOS、Linux 实操指南

2026-10-24 22:08:14 · 赞叹不已网 · 热点 · 阅读 202

服务起不来、命令提示“端口已被占用”,行查或者本机某个程序连不上,看端口占却不知道是实操谁占了端口——这类问题在开发和运维里非常常见。图形界面的指南资源监视器有时不够直观,命令行反而更快。命令本文按 Windows、行查macOS、看端口占Linux 三类系统分别给出常用命令,实操并补充“查到之后怎么处理”的指南完整流程,包括失败分支和容易踩的命令坑。命令输出会因系统版本、行查权限和安装的看端口占工具不同而有差异,具体以本机实际界面与官方文档为准。实操

先明确一个概念:端口占用通常指某个进程正在“监听”(LISTEN)某个 TCP 或 UDP 端口,指南也可能只是建立了连接。查看时要关注三件事——端口号、协议(TCP/UDP)、以及占用它的进程 PID。拿到 PID,才能进一步确认是哪个程序,进而决定是结束它、改配置,还是换端口。

Windows:netstat 与 PowerShell 两条路

最经典的是 netstat。以管理员身份打开“命令提示符”或“终端”,输入:

netstat -ano | findstr :8080

其中 -a 显示所有连接和监听端口,-n 以数字形式显示地址和端口(不做反向域名解析,速度更快),-o 显示对应的进程 PID。把 8080 换成你要查的端口即可。输出里 LISTENING 表示正在监听,ESTABLISHED 表示已建立连接。最后一列就是 PID。

拿到 PID 后,用任务列表确认进程名:

tasklist | findstr 12345

把 12345 换成实际 PID。如果想让结果更结构化,可以在 PowerShell 里用:

Get-NetTCPConnection -LocalPort 8080 | Select-Object LocalAddress,LocalPort,State,OwningProcess

再配合 Get-Process -Id 进程号 查看进程详情。注意:普通权限下部分系统进程的信息可能看不全,建议用管理员权限运行;另外某些端口被系统保留或由服务宿主占用,直接结束进程可能影响其他功能,操作前先确认进程身份。

macOS 与 Linux:lsof、ss、netstat 怎么选

macOS 上最常用的是 lsof:

lsof -i :8080

它会列出占用该端口的进程名、PID 和用户。如果提示 command not found,说明系统未自带该工具,可自行安装;若输出为空,通常代表当前没有进程监听该端口,而不是命令失效。想按协议过滤可加 -iTCP 或 -iUDP。结束进程用 kill -9 PID,但请先确认这个进程确实可以终止。

Linux 上更推荐 ss,它比 netstat 更快,很多发行版已默认安装:

ss -tulnp | grep :8080

参数含义:-t 看 TCP,-u 看 UDP,-l 只看监听状态,-n 显示数字端口,-p 显示进程信息。要看到进程名和 PID,通常需要 root 权限,可在命令前加 sudo。如果系统没有 ss,可退回 netstat -tulnp | grep :8080;部分精简系统连 netstat 也未预装,需要安装 net-tools 之类的软件包,具体包名以发行版官方仓库为准。

还有一种情况:命令能查到端口,但看不到进程名。这多半是权限不足,或进程属于其他用户。此时先用 sudo 重试;仍看不到时,再确认该端口是否被内核或容器网络占用。

查到占用之后:先判断,再处理

看到结果别急着杀进程,按下面的顺序判断更稳妥:

  • 确认进程身份:是数据库、Web 服务、开发工具自带的服务器,还是你根本不认识的程序。
  • 判断影响面:如果是系统服务或共享组件,结束它可能连带影响其他应用。
  • 优先改配置:自己的项目换一个端口,往往比强行结束别人的进程更安全。
  • 确定要释放时,先尝试正常停止服务,再考虑强制结束。
  • 处理完用同一条命令复查一次,确认端口已释放或已由新进程接管。
  • 另外提醒两点:端口号范围是 0–65535,其中 1024 以下的端口在类 Unix 系统上通常需要特权才能绑定;同一端口在 TCP 和 UDP 下可以各自被不同进程占用,查的时候别只看一半。若你是在容器或虚拟化环境中排查,宿主机的端口映射关系与容器内部并不相同,需要分别查看,具体以所用平台的官方说明为准。

    常见疑问与失败分支

    问:命令执行后没有任何输出怎么办?答:先确认端口号拼写和冒号写法是否正确,再确认是否漏了 -a 或 -l 参数;如果确实没有输出,一般说明该端口当前无人监听。问:提示权限不足怎么办?答:用管理员或 sudo 重试。问:查到 PID 但进程一闪就没了?答:可能是短连接或定时任务,可多执行几次命令观察,或结合系统日志排查。

    最后给一个通用小结:Windows 用 netstat -ano 加 findstr,macOS 用 lsof -i,Linux 优先用 ss -tulnp;核心是拿到 PID,再决定结束进程还是更换端口。把这几条命令记熟,命令行查看端口占用基本可以应对日常排查,遇到环境差异时以本机系统界面和官方文档为准。