ss 怎样按进程筛选监听端口
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 | 仅监听套接字 | 不是所有已建立连接 |
| -t | TCP | 不包含 UDP 服务端点 |
| -n | 不解析服务名 | 不会自动筛选进程 |
| -p | 展示使用套接字的进程 | 不保证当前权限能看全 |
| -H、-O | 无表头、单行展示 | 不把文本变成稳定结构化 API |
结果里需要关联的是本地地址、端口以及 users 中的进程名、pid 和 fd。对 TCP 监听记录而言,重点是本地端点,不能把 Peer Address 当作服务监听端口。这里的 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 的进程列表,不一定能完整还原映射关系。

查到结果后,还需要区分哪些情况
UDP 也用同一条命令吗? 需要把 TCP 范围改为 UDP,例如使用 -lunp 查看相关端点。UDP 没有 TCP 那样的 LISTEN 状态,不能拿 TCP 状态语义机械解释 UDP 输出。
同一个端口出现多个 PID 是错误吗? 不一定。套接字可能被多个进程共享或继承,多个记录也可能属于不同地址、地址族或套接字。先保留完整端点和 PID 列表,不能强行归为“一个端口只能一个进程”。
监听 127.0.0.1 与 0.0.0.0 有何区别? 前者绑定回环地址,后者表示该地址族的通配绑定。即使监听到通配地址,也不能直接证明外部客户端可达,还需考虑路由、访问策略与部署转发。
可以顺便关闭发现的端口吗? 本文只是只读定位,不使用 ss 的 -K 等关闭能力。发现监听并不授权终止套接字或进程,后续变更应走独立的服务管理流程。
实用顺序是先确定观察环境,再列监听和进程字段,最后按完整 PID 匹配。把“没匹配”“没权限”“命名空间不同”分别记录,结果才不会被误读为同一个故障。
journalctl 怎样按 PRIORITY 筛选错误级别日志
- 上一篇
- journalctl 怎样按 PRIORITY 筛选错误级别日志
- 下一篇
- nftables 怎样按集合更新允许的地址
-
- 文章 · linux | 1小时前 |
- ip route 怎样判断策略路由命中了哪个表
- 175浏览 收藏
-
- 文章 · linux | 1小时前 |
- journalctl 怎样按 PRIORITY 筛选错误级别日志
- 486浏览 收藏
-
- 文章 · linux | 1小时前 | Linux · systemd systemctl show unit状态
- systemd 怎样用 unit 状态属性做脚本判断
- 448浏览 收藏
-
- 文章 · linux | 1小时前 | Linux · 内存管理 · Linux OOM cgroup v2 memory.events memory.max memory.high
- Linux cgroup v2 memory.events 中 high 与 oom 如何区分
- 333浏览 收藏
-
- 文章 · linux | 1天前 |
- Linux systemd 怎样查看服务真实失败原因
- 117浏览 收藏
-
- 文章 · linux | 1天前 |
- Linux ulimit 怎样判断文件句柄上限
- 125浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 669次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 686次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 733次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 701次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 536次使用
-
- Linux vmstat 如何分辨内存抖动与磁盘等待:si、so、wa 与复测顺序
- 2026-08-30 501浏览
-
- Linux搭建vsftpdFTP服务器教程
- 2026-04-30 501浏览
-
- Shell脚本安装教程:.sh一键安装指南
- 2026-03-16 501浏览
-
- Linux清空文件内容的几种方法
- 2025-12-01 501浏览
-
- Linux命令行下载文件技巧
- 2025-11-23 501浏览

