ss命令可查PID关联Socket,需root权限和内核支持CONFIG_INET_DIAG等选项;用sudo ss -tulnp | grep 'pid=1234'可快速定位指定进程的连接。

在 Linux 中,ss 命令比 netstat 更快、更轻量,且原生支持按进程 ID(PID)筛选 Socket 连接。但要注意:必须以 root 或具有 CAP_NET_ADMIN 权限的用户运行,才能查看其他用户的 PID 关联信息。
确认 ss 支持 -tulnp 并能解析 PID
ss 查 PID 关键依赖 -p 选项(显示所属进程),而该功能需满足两个前提:
- 内核开启
CONFIG_INET_DIAG和CONFIG_INET_DIAG_DESTROY(现代发行版默认启用) - 运行用户有权限读取
/proc/[pid]/fd/下的 socket 文件描述符(普通用户只能查自己的进程)
验证方式:sudo ss -tuln | head -5 看是否正常输出;再试 sudo ss -tulnp | head -5,若出现 users:(("nginx",pid=1234,fd=6)) 类似字段,说明可用。
快速查指定 PID 的所有 Socket 连接
直接使用 -p 配合 grep 是最常用方法:
-
sudo ss -tulnp | grep 'pid=1234'—— 查 PID 为 1234 的 TCP/UDP 监听与已连接套接字 -
sudo ss -tnp | grep 'pid=1234'—— 仅查 TCP(含 ESTABLISHED、TIME-WAIT 等状态) -
sudo ss -tunlp | grep ':80\|pid=1234'—— 同时过滤端口和 PID,适合定位 Web 服务绑定情况
注意:输出中 fd=N 表示该 socket 对应进程的第 N 号文件描述符,可用于进一步检查 /proc/1234/fd/N 是否为 socket。
精准匹配 + 减少干扰输出
用 awk 或 sed 提取干净字段,避免 grep 误匹配:
sudo ss -tunlp | awk -F'[,)]' '$0 ~ /pid=1234/ {for(i=1;i- 更简洁可靠的方式:
sudo ss -tunlp "( sport = :80 or dport = :80 )" | grep "pid=1234"—— 先按端口缩小范围,再筛 PID - 想排除无关列?加
-o(显示计时器)或-e(扩展信息)前先确认是否必要,多数场景-tunlp已足够
配合 lsof 或 /proc 辅助验证
当 ss -p 输出不明确(如显示 users:(("?",pid=1234,fd=6))),说明进程名不可读(常见于容器或 chroot 环境),此时可:
- 查进程命令行:
cat /proc/1234/cmdline | tr '\0' ' ' - 看打开的 socket 文件:
ls -l /proc/1234/fd/ | grep socket - 对比 lsof(较慢但兼容性好):
sudo lsof -nP -i -P -a -p 1234
注意:lsof 默认不显示 PID 列,需加 -p 1234 才聚焦;而 ss 的优势正在于无额外依赖、响应更快、适合脚本批量处理。










