怎么查一个端口被谁占用?Linux和Windows各有顺手的一招
服务起不来,日志里报「地址已被使用」;或者要在某个端口上新起一个服务,动手前想先确认这个口有没有人占。查端口占用是运维里的高频小动作,动作本身不难,难在两个系统各有一套顺手工具,很多人只记住了其中一边。这一篇把两边的路数都摆出来,顺带说清查到之后怎么判。
Linux:ss 优先,netstat 兜底
在 Linux 上,一条 ss -tlnp 列出所有处于监听状态的端口和对应进程;只关心某个端口,管道接一个 grep 加端口号就行。老一点的系统上没有 ss,用 netstat -tlnp 出来的结果一样。两者的差别在性能:ss 直接读内核接口,机器上连接数多的时候比 netstat 快得多,所以新环境建议先养成用 ss 的习惯,netstat 留作老机器上的备胎。
Windows:netstat -ano 加任务管理器对 pid
Windows 上是两步走:netstat -ano 列出监听端口,输出一栏是地址和端口,一栏是 PID;拿到 PID 之后,去任务管理器的「详细信息」页按 PID 排序找到进程名。两步连起来,「端口—PID—进程」这条链就闭合了,占口的是谁、叫什么名字,一目了然。命令行用熟了也可以直接按 PID 查进程名,省去点开任务管理器那一步。
查到之后怎么判
有监听条目,说明这个口确实有人在听,接下来看进程名认不认识:是自己人(要部署的那个服务的旧实例、还活着的上一个版本),就先停旧的再起新的,或者干脆换一个端口;不认识的进程占着,先弄清楚它是什么、谁起的,再决定处置——上来就杀进程,容易把别的业务连带放倒。反过来,命令敲下去没有任何输出,说明这个口没人监听,可以放心用。另外还有一类 TIME_WAIT 状态的条目,是刚结束的连接在等待收尾,属于短暂占用,等一会儿自己散,不需要处理。
最后把层次摆正:这一篇讲的是「怎么查」,属于工具层;服务启动时报「地址已被使用」该怎么读、具体服务被占之后怎么处置,是再往上的两层。三层连起来走顺,端口类的麻烦基本都能自己收口,不用每次都靠猜。
企业存储选型参考|贵州诚鑫致达
做机房存储、虚拟化或监控归档,群晖机型参考:FS6400(全闪存阵列) · SA3610 · SA3410。需要选型建议或上门评估,搜「诚鑫致达」即可找到我们。