要监控指定进程的网络连接状态,核心是先获取其PID(如pgrep nginx),再用sudo ss -tunp | grep "pid=1234"精准筛选;ss速度快、信息准,配合-c可实时刷新,lsof -i -p PID和netstat -tulnp | grep PID可交叉验证。

要监控指定进程的网络连接状态,核心思路是:先定位该进程的 PID,再通过工具筛选出它打开的所有网络 socket。Linux 提供了多个命令可组合使用,无需额外安装即可完成,关键在于选对参数和权限。
用 ss 查看指定进程的实时连接
ss 是现代推荐工具,速度快、信息准,支持直接按进程过滤。
- 先查进程 PID,例如找 nginx:
pgrep nginx或pidof nginx - 再用
sudo ss -tulnp列出所有监听与已建立连接,并带进程信息;输出中会显示类似users:(("nginx",pid=1234,fd=6)) - 若只想看某 PID 的连接,可用:
sudo ss -tunp | grep "pid=1234" - 想持续观察变化,加
-c参数(如sudo ss -tunp -c 2表示每 2 秒刷新一次)
用 lsof 按进程名或 PID 查网络文件
lsof 把网络连接也视为“打开的文件”,适合精准定位进程级网络行为。
- 查某个进程名的所有网络连接(含 IPv4/IPv6、TCP/UDP):
sudo lsof -i -P -n -p $(pgrep nginx) - 只看监听状态:
sudo lsof -i -P -n -sTCP:LISTEN -p 1234 - 查特定端口被哪个进程占用:
sudo lsof -i :8080,快速反向定位 -
-P禁用端口名解析(显示数字端口),-n禁用主机名解析,避免延迟
结合 netstat 做兼容性验证
虽然 netstat 在新系统中可能未预装,但部分环境仍依赖它,语法更直观。
- 查看某 PID 占用的网络连接:
sudo netstat -tulnp | grep "1234/"(注意末尾斜杠,防止匹配到其他 PID) - 只看该进程的已建立 TCP 连接:
sudo netstat -tnp | grep "1234/" | grep ESTABLISHED - 若提示命令不存在,Debian/Ubuntu 可运行
sudo apt install net-tools
进阶:实时流量维度监控
如果还需知道该进程每秒发多少包、传多少字节,单靠连接列表不够,需补充工具:
-
nethogs:按进程显示实时带宽占用,启动后直接看到 nginx、curl 等进程的上行/下行速率 - 安装后运行:
sudo nethogs eth0(替换为你的网卡名),支持键盘快捷键交互 - 它不依赖 /proc/net,而是基于 netlink socket 抓包,结果更贴近真实流量


















