当前位置:首页 > 文章列表 > 文章 > linux > ss 怎样按进程筛选监听端口

ss 怎样按进程筛选监听端口

来源:17golang原创 2026-10-24 22:41:09 0浏览 收藏

ss 按进程查监听端口,通常先用 ss -ltnp 列出 TCP 监听套接字及其进程信息,再按输出中的 PID 或进程名筛选。-p 是显示进程,不是指定 PID;不要把 ss -p 12345 当作按 PID 查询的通用语法。

下面只查看自己有权管理的 Linux 系统,不关闭套接字、不重启服务。ss 属于 iproute2,项目源码入口:https://git.kernel.org/pub/scm/network/iproute2/iproute2.git/。本文依据项目手册编写,命令为说明示例,未在本机执行,配图也不是运行截图。

先列 TCP 监听套接字,再读取进程字段

先不要加进程过滤。确认当前视角里有哪些 TCP 监听记录,再看这些记录是否能显示 users 字段,能避免把“进程信息不可见”误认为“没有监听”。

# 查看当前网络命名空间中的 TCP 监听,保留数字地址和进程信息。
ss -ltnp

# 为后续文本筛选去掉表头,并将每个套接字信息保持在一行。
ss -H -O -ltnp
选项作用不能推出的结论
-l仅监听套接字不是所有已建立连接
-tTCP不包含 UDP 服务端点
-n不解析服务名不会自动筛选进程
-p展示使用套接字的进程不保证当前权限能看全
-H、-O无表头、单行展示不把文本变成稳定结构化 API

结果里需要关联的是本地地址、端口以及 users 中的进程名、pid 和 fd。对 TCP 监听记录而言,重点是本地端点,不能把 Peer Address 当作服务监听端口。这里的 PID 是当前观察环境可见的进程标识,不是服务名称。

TCP 监听套接字、本地端点与进程字段的静态结构图
图1:静态结构说明图。套接字记录把监听端点和进程信息关联起来,-p 负责显示关联信息,不承担 PID 条件过滤。

知道 PID 时,怎样避免匹配到相邻数字

已知 PID 时,应匹配明确的 pid 字段,而不是在整行搜索裸数字。比如直接搜索 12345,可能命中端口、另一个更长 PID,或其他字段。下面先限制变量只能含数字,再匹配 pid= 后面的完整字段。

#!/usr/bin/env bash
set -o pipefail

# 替换为当前环境中已确认的目标 PID,不把进程名当成 PID。
target_pid=12345
case "$target_pid" in
    ''|*[!0-9]*)
        echo "目标 PID 必须是数字" >&2
        exit 2
        ;;
esac

# pid 字段后以逗号结束,避免 12345 命中 123456。
ss -H -O -ltnp |
    awk -v p="$target_pid" '$0 ~ ("(^|[,(])pid=" p ",") { print }'

这段是 Bash 写法。pipefail 用来保留管道上游失败的状态,避免 ss 本身报错却被后面的文本命令掩盖。awk 没有匹配时仍可能正常退出,因此“命令退出成功”和“确实找到匹配记录”也要分开。

此处依赖常见 users 文本中的 pid=数字,fd=数字 表达形式。不同发行版版本若输出不同,应以当地手册与原始输出为准;不要把它当作长期监控系统的无版本结构化协议。PID 还可能因进程退出而复用,重要排障记录应同时保留时间和进程身份线索。

只有进程名时,怎样缩小候选范围

只有进程名时,可以先对显示名称做字面量匹配,再检查每个候选 PID。以 nginx 为例,下面查找的是进程名称字段的一部分固定表达,不是对所有内容做宽泛的 nginx 搜索:

# 按常见进程字段表达筛出候选;名称可能涉及多个主进程或工作进程。
ss -H -O -ltnp | grep -F '"nginx",'

# 已知本地端口时,用 ss 自身的端口过滤进一步缩小范围。
ss -H -O -ltnp 'sport = :8080'

第一条仍是文本筛选,名称可能截断或存在多个同名实例,不能直接证明它就是目标部署。第二条只按本地源端口筛选,不是按进程;应在结果中继续核对 PID。grep 无匹配通常退出 1,这与命令语法错误不是同一种含义。

如果应用叫 java 或 python,显示名称往往不足以区分业务实例。应先借助已有服务管理记录确认目标 PID,再按上一节查询;不要因为进程名字一样,就把几个应用的端口混成一组。

为什么有监听端口,却没有进程信息

能看到地址与端口,但看不到 users 或 pid,不代表套接字没有所属进程。读取进程关联信息受到权限、进程可见性与 /proc 访问环境影响,查询过程中进程退出也可能使关联信息不完整。

先使用自己已有权限查看。如果确实需要观察其他账户的服务,应按组织授权由具备相应权限的人执行同一只读查询,而不是为了显示 PID 修改系统隔离设置。下面仅说明已获授权时的常见调用方式:

# 仅在获准查看系统服务进程信息时使用;不修改网络或服务状态。
sudo ss -H -O -ltnp

不要把无 PID 的记录直接从排障结论中删掉。应记录“存在监听端点,但进程关联未取得”,然后再确认权限和运行环境。反过来,按 PID 查询没有输出,也可能是该进程仅发起出站连接,或它使用了本文没有选择的套接字类型。

容器里看到的 PID 和端口为什么不同

网络命名空间决定你看到哪一组套接字,PID 命名空间决定进程编号视角。宿主机和容器内的同一进程可能显示不同 PID;容器自己的监听端口也不等于宿主机对外映射的端口。

优先在已授权的容器或服务诊断环境中运行 ss,并在同一视角确认目标 PID。对于已命名的网络命名空间,ss 提供 -N NSNAME;但切换网络命名空间不等于自动解决所有 PID、/proc 和权限可见性问题。

# app-net 必须是已存在且获准查看的命名网络命名空间。
ss -N app-net -H -O -ltnp

若它报权限或命名空间不存在,保留原错误并联系该环境的管理方,不要据此判断业务停止监听。容器端口映射还可能由转发规则或代理实现;单看宿主机 ss 的进程列表,不一定能完整还原映射关系。

网络命名空间、PID 视角与进程信息可见性的静态边界图
图2:静态边界说明图。套接字集合、进程编号和访问权限共同影响查询解释,不能只更换一个 PID 数字就跨环境比较。

查到结果后,还需要区分哪些情况

UDP 也用同一条命令吗? 需要把 TCP 范围改为 UDP,例如使用 -lunp 查看相关端点。UDP 没有 TCP 那样的 LISTEN 状态,不能拿 TCP 状态语义机械解释 UDP 输出。

同一个端口出现多个 PID 是错误吗? 不一定。套接字可能被多个进程共享或继承,多个记录也可能属于不同地址、地址族或套接字。先保留完整端点和 PID 列表,不能强行归为“一个端口只能一个进程”。

监听 127.0.0.1 与 0.0.0.0 有何区别? 前者绑定回环地址,后者表示该地址族的通配绑定。即使监听到通配地址,也不能直接证明外部客户端可达,还需考虑路由、访问策略与部署转发。

可以顺便关闭发现的端口吗? 本文只是只读定位,不使用 ss 的 -K 等关闭能力。发现监听并不授权终止套接字或进程,后续变更应走独立的服务管理流程。

实用顺序是先确定观察环境,再列监听和进程字段,最后按完整 PID 匹配。把“没匹配”“没权限”“命名空间不同”分别记录,结果才不会被误读为同一个故障。

参考:iproute2 项目 ss 手册源码、Linux 命名空间工具说明。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
journalctl 怎样按 PRIORITY 筛选错误级别日志journalctl 怎样按 PRIORITY 筛选错误级别日志
上一篇
journalctl 怎样按 PRIORITY 筛选错误级别日志
nftables 怎样按集合更新允许的地址
下一篇
nftables 怎样按集合更新允许的地址
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    669次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    686次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    733次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    701次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    536次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码