如何查看端口占用(windows,linux,mac)
如何查看端口占用,各平台
一、背景
如何查看端口占用?网上很多,但大多直接丢出命令,没有任何解释关于如何查看命令的输出
所谓 “查端口占用”,即查看某个端口是否被某个程序占用,如果有,被哪个进程占用。PS:进程都有进程ID标识。
二、命令概览
| 适用平台 | 命令 | 作用 | 补充 |
|---|---|---|---|
| Linux | netstat -tunlp|grep 8080 | 查看占用8080端口的进程ID | MacOS中用不了。看第四列(即本地地址),看完全匹配端口号的那行所对应的PID。这个命令本身就查出LISTEN正在监听的! (Linux显示为LISTEN,Windows显示为LISTENING,一个意思) |
| Windows | netstat -ano|findstr 8080 | 查看8080端口占用的进程ID | findstr也可以用findStr,8080也可以用双引号 “8080”。看第二列(即本地地址),看完全匹配端口号且状态是LISTENING的那行所对应的PID。 |
| MacOS/Linux | lsof -i:8080 | 查看8080端口占用的进程ID | MacOS中用,Linux可以用,但Linux可能默认没这个命令得自己装。如果遇到问题可以尝试加上sudo在前面:sudo lsof -i:8080,这个命令是精确匹配8080端口,不会将18080的占用显示出来 |
注意,Linux的LISTEN状态就是Windows里的LISTENING状态,一个意思用了不同单词
三、命令的输出结果详细解释
3.1、Windows:netstat -ano|findstr 8080
将端口号替换成你想查的的端口号即可
3.1.1、返回的结果类似于

这么多列,从左到右的含义是:协议、本地地址、外部地址、状态、进程ID
记不住使用 netstat -ano 可输出表头(注意表头和值有点没对齐)

netstat -ano|findstr 8080的findstr,或者Linux的grep的含义是对前面的输出的结果,即一行行的结果,过滤出带有8080字符串的每一行,重新组成结果。过滤规则是前后模糊匹配,即%yourKeyword%,无论一行中哪列带有8080字符串都会过滤出来,比如本地地址或外部地址都有可能因为含有8080而被匹配。显然表头因为不包含8080会被过滤掉,这就是为什么过滤后不显示表头的原因,你用netstat -ano|findstr 本地就可以过滤出表头。
3.1.2 命令的输出结果解读正式开始
如果什么都没输出,就是没有任何进程占用这个端口

如果有占用,至少会输入如下

有时候复杂一点,会输出

如何查看呢,这么多8080,而且进程ID还不一样
- 首先要看第二列,看第二列中是8080端口的
- 最后看 LISTENING 状态的
这样过滤后就会剩下2条,其中一条是IPv4另一条是IPv6,都是一样的,提示被12636进程占用
IPv4的写法:0.0.0.0:8080,IPv6的写法:[::]:8080
有时候会查不到LISTENING状态的,但是又查出了其他的东西,这时候其实是没有端口占用的

这种情况的出现是因为,比如8080本身是启动的,被访问后就会留下痕迹,然后8080的进程被杀掉后则LISTENING状态的立即会消失,但是其他状态的还会缓存一段时间,实际测试过一段时间(具体我没数多久)后再查,就什么都没了
3.1.3 其他可能的疑惑的说明
-
为什么有2行?
一行是IPv4的,另一行IPv6。虽然2行但进程ID其实是相同的,没有不一致。其实详细的我也不那么清楚,有知道更多细节的可以留言。
-
为什么要看第二列(本地地址),为什么是第二列不是第三列(外部地址),为什么要看 LISETNING 状态的?
-
首先,基础知识是,双方要连接,则双方的进程都得有地址(IP和端口号)才能连,所以有两个地址。
比如你在浏览器访问某个网站,表面看似乎你本机不需要IP和端口,实际你打开浏览器的开发者工具,可以看到发出的每个请求,都有你本地
-
一般来说,你要查某个端口被占用,那这个端口肯定是被一直占用着才犯得着你来排查,所以要查 LISTENING 状态的,因为 LISTENING 就是持久占用、正在监听中的。
-
要查看本地地址而不是远程,是因为本地地址才是某个服务启动之后一直占用端口的,远程地址是远程要连接本机的IP和端口,肯定是不用管远程地址,毕竟远程地址要连接服务器用的一般都是临时的端口号用完即回收的
我们在使用 jmeter 压测的时候,其实是有个基础知识的,就是你要模拟超过6万多个用户同时访问某个接口,单机是不行的。因为,比如你的 jmeter 安装在A机器,操作系统最多就65536个端口号,要在A机器同时模拟这么用户,就得同时起这么多线程,一个线程代表一个用户,那每个线程要占用一个端口号跟被压测的服务器上的接口通信,一台机器的最多65536个端口号被同时使用,所以一台机器能同时压测的数量自然是受到最大端口数限制的
-
第二列中的
0.0.0.0:8080中,0.0.0.0是指不限制远程的端口号熟悉 Redis 配置的都知道有个 bind 配置,0.0.0.0就是表示谁都可以连上来,而127.0.0.1就是只有本地可连,这样子可以限制远程连上来的IP,更安全。这里是同样的意思

-
3.2、Linux (有些原理的东西跟Windows一样,建议有不清楚的可以翻看Windows的)
使用 netstat -tunlp|grep 8080,该命令记忆tunlp,tun+lp,囤老婆。。。最后输出的列的顺序跟这些字母没关系,例如netstat -tunpl|grep 8080 输出的并不会调换列的位置
由于该命令的 l 参数只查出 LISTEN 状态(即监听中)的了,所以不需要人工过滤监听中的状态了,只需要看第4列的地址,即本地地址,只要看这列能完整匹配你要查的端口号即可,匹配后的那行的PID就是你要找的。
同样的,你若不知道表头,可以让命令去掉grep的部分查一下,即 netstat -tunlp 查下,可以发现依次是:Proto,Recv-Q,Send-Q,Local Address,Foreign Address,State,PID/Program name
(TODO:补充截图)
3.3、MacOS
3.3.1、使用 lsof -i:8080
可以查占用8080端口的程序,如果需要可以加sudo,如sudo lsof -i:8080。
结果解读
-
输出的结果如下图,有多个,但是要看LISTEN状态的。
-
这个命令的端口参数是精确匹配的,即精确匹配8080,不会匹配到18080的端口的占用,我已经做过了实验,验证过。
如下图,如果某个端口没有占用,则什么都没

如下图,如果虽然有输出结果,但是没有LISTEN状态的(看箭头括号里的),也是没有任何程序占用
(为什么会没有LISTEN状态的?这个可能是因为之前的缓存,如果刚刚8080端口的程序被访问过,然后8080端口程序立即被杀掉,就立即没有LISTEN状态的,但是因为访问过8080端口的程序就会有点缓存,过一段时间再查就会发现以下的信息都没了)

如下图,如果有一条是LISTEN状态的,这样查看PID就找到了占用程序

怎么证明我上述 lsof -i:8080 查出来的8080而不是18080的?我同时启动了8080和18080两个web程序,可以看到lsof -i:8080的结果没有掺杂18080端口的结果,而且使用 lsof -i:18080是能正确找到真正的占用程序的

3.3.2 使用 netstat 命令(明确这个命令似乎行不通)
MacOS也是可以使用 netstat 命令,只是参数跟 Linux的不太一样,这是因为macOS 使用的是基于 BSD 的网络工具,因此 netstat 命令的参数和输出格式可能会与 Linux 中的稍有不同。
使用的命令是 netstat -an|grep 8080,但是非常不幸的是这个命令不能输出PID列, netstat --help查看了帮助文档似乎也没什么参数可以支持,所以暂时无解,无法使用netstat在MacOS中查看端口占用。评论区知道的可以补充一下。
四、补充:
关于netstat的用法,在Linux/Windows中可以使用 netstat --help 列出后面的选项的字母代表的意思,Windows默认输出中文,还可以先 chcp 437命令之后切换成英文之后再查命令的帮助。
- Windows 中文版和英文版

中文版如下

- Linux
(TODO待补充)
-
MacOS
-
lsof命令

-
netstat 命令
下面的命令提示了使用方式,似乎提示了 illegal option,也许
netstat --help对于 macOS 来说并不是查看命令的方法,只是因为用错了命令才提示正确的Usage?不管怎么样,都提示了使用方式,如果不嫌长篇大论,可以使用
man nestat查看命令的使用方式

-
相关文章:
如何查看端口占用(windows,linux,mac)
如何查看端口占用,各平台 一、背景 如何查看端口占用?网上很多,但大多直接丢出命令,没有任何解释关于如何查看命令的输出 所谓 “查端口占用”,即查看某个端口是否被某个程序占用,如果有,被哪…...
Photoshop与Web技术完美融合,Web版Photoshop已正式登场
通过WebAssembly Emscripten、Web Components Lit、Service Workers Workbox以及对新的Web API的支持,Chrome和Adobe之间的合作使得将Photoshop桌面应用程序引入Web成为了一项重大的里程碑。现在,您可以在浏览器上使用高度复杂和图形密集的软件&#…...
易点易动:提升企业固定资产管理效率的完美解决方案
在现代商业环境中,企业的固定资产管理是一项关键任务。高效的固定资产管理可以帮助企业降低成本、提高生产力,并确保资产的最佳利用。然而,传统的资产管理方法常常繁琐、低效,导致信息不准确、流程混乱。为了解决这一问题…...
SRE实战:如何低成本推进风险治理?稳定性与架构优化的3个策略
一分钟精华速览 SRE 团队每天面临着不可控的各类风险和重复发生的琐事,故障时疲于奔命忙于救火。作为技术管理者,你一直担心这些琐事会像滚雪球一样,越来越多地、无止尽地消耗你的团队,进而思考如何系统性地枚举、掌控这些风险&a…...
APK大小缩小65%,内存减少70%:如何优化Android App
APK大小缩小65%,内存减少70%:如何优化Android App 我们一直在努力为我们的Android应用程序构建MVP产品。在开发MVP产品后,我们发现需要进行应用程序优化以提高性能。经过分析,我们发现了以下可以改进的应用…...
传统工厂如何搭建蒸汽流量远程无线抄表系统?
一、应用背景 2021年国务院政府工作报告中指出,扎实做好碳达峰、碳中和各项工作,制定2030年前碳排放达峰行动方案,优化产业结构和能源结构,特别是近期煤炭价格上涨导致蒸汽价格大幅上涨,节能减排显得更加重要…...
睿趣科技:抖音店铺怎么取名受欢迎
抖音作为国内最大的短视频平台,其商业价值不容忽视。许多商家和创作者都在抖音上开设了自己的店铺,而一个富有创意和吸引力的店铺名字,往往能带来更多的客流量。那么,如何为抖音店铺取个好名字呢?以下是一些有用的建议。 明确定位…...
面试经典 150 题 22 —(数组 / 字符串)— 28. 找出字符串中第一个匹配项的下标
28. 找出字符串中第一个匹配项的下标 方法一 class Solution { public:int strStr(string haystack, string needle) {if(haystack.find(needle) string::npos){return -1;}return haystack.find(needle);} };方法二 class Solution { public:int strStr(string haystack, s…...
儿童产品亚马逊CPC认证审核不通过的原因解析
一、亚马逊CPC认证审核不通过的原因 CPC认证是亚马逊针对卖家销售儿童用品的一个认证,如果提交CPC证书到亚马逊,亚马逊审核一直不通过,我们可以从几个方面入手来查下什么原因,是资料本身的原因?是否提供的资料合规&…...
项目_数据可视化| 折线图.散点图.随机漫步
安装matplotlib 在正式开始编写程序之前,需要先安装pip、matplotlib模块,苹果系统的安装问题在之前的文章中有相关介绍内容,如果pycharm运行模块报错,可以再次检查是否版本兼容问题。 绘制折线图 调用subplot(&#x…...
Android 项目增加 res配置
main.res.srcDirs "src/main/res_test" build->android->sourceSets...
MySQL数据库的MVCC详解
在MySQL的事务隔离锁机制中,MVCC是一个非常重要的概念,学会MVCC可以更好地理解MySQL如何实现各种隔离级别。 首先,大概地介绍一下mysql的事务隔离级别: 1、读未提交(Read Uncommited):指的是&…...
AI:10-基于TensorFlow的玉米病害识别
玉米是世界上最重要的粮食作物之一,然而,玉米病害对其产量和质量造成了严重威胁。传统的病害识别方法通常依赖于人工观察和经验判断,效率低下且易受主观因素影响。近年来,基于深度学习的图像识别技术在农业领域取得了显著进展,为玉米病害的快速、准确识别提供了新的解决方…...
vue3前端开发系列 - electron开发桌面程序(2023-10月最新版)
文章目录 1. 说明2. 创建项目3. 创建文件夹electron3.1 编写脚本electron.js3.2 编写脚本proload.js 4. 修改package.json4.1 删除type4.2 修改scripts4.3 完整的配置如下 5. 修改App.vue6. 修改vite.config.ts7. 启动8. 打包安装9. 项目公开地址 1. 说明 本次安装使用的环境版…...
前端uniapp生成海报并保存相册
uiapp插件 目录 图片qrcode.vue源码完整版封装源码qrcodeSwiper.vue最后 图片 qrcode.vue源码完整版 <template><view class"qrcode"><div class"qrcode_swiper SourceHanSansSC-Normal"><!-- <cc-scroolCard :dataInfo"dat…...
0基础学习VR全景平台篇 第104篇:720全景后期软件安装
上课!全体起立~ 大家好,欢迎观看蛙色官方系列全景摄影课程! 摄影进入数码时代,后期软件继承“暗房工艺”,成为摄影师表达内在情感的必备工具。 首先说明,全景摄影与平面摄影的一个显著的区别是全景图片需…...
CMakeLists编译前拷贝文件或目录
${CMAKE_CURRENT_BINARY_DIR} 编译工程目录 file(COPY python/ DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/python/ FILES_MATCHING PATTERN "*.exe") file(COPY python/Lib DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/python/) file(COPY python/Libs DESTINATION $…...
mysql面试题35:MySQL有关权限的表有哪些?
该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:MySQL有关权限的表有哪些? MySQL中与权限相关的表主要包括以下几个: user表:存储MySQL用户的基本信息,包括用户名、密码等。可以使用以下命令…...
ES6:什么是Symbol_
引言 在编程领域,我们经常听到关于"Symbol"的术语,但你知道它到底是什么吗?Symbol是一种基本数据类型,它在JavaScript中被引入,用于表示唯一的标识符。本文将介绍Symbol的概念、用途以及如何在代码中使用它…...
E. Li Hua and Array
Problem - E - Codeforces 思路:观察给定的函数,其实就是求与这个数互质的数的个数,即欧拉函数,我们发现一个数迭代欧拉函数不会很多,那么对于第一个操作来说我们可以直接暴力修改,而对于第二个操作来说&am…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...
面试高频问题
文章目录 🚀 消息队列核心技术揭秘:从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"?性能背后的秘密1.1 顺序写入与零拷贝:性能的双引擎1.2 分区并行:数据的"八车道高速公路"1.3 页缓存与批量处理…...
