查找使用网络设备的进程

查找使用网络设备的进程

如何找到在特定时刻哪些进程正在使用特定网络接口?我正在使用 Fedora 和 Ubuntu。

答案1

netstat -ap -i <interface>

这应该会显示您正在寻找的信息。如果您将watch其放在前面,您将看到更新。

答案2

如果您知道相关接口的名称,则可以使用该名称并在 下的进程中查找/proc。我们最近遇到了一个问题,我们需要找出哪些 VM (qemu) 进程正在使用特定的网络接口。

有问题的接口名为enp98s0.134。该数字后缀.134是此接口使用的 VLAN。

$ ip a l enp98s0.134
72: enp98s0.134@enp98s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master storage state UP group default qlen 1000
    link/ether 00:25:34:12:a1:7f brd ff:ff:ff:ff:ff:ff

为了找到哪些进程正在使用它,我们只需查看/proc哪些 QEMU 进程正在引用它。

$ for i in $(pgrep qemu); do find /proc/$i -type f | grep enp98s0.134$;done | head
/proc/24217/task/24217/net/vlan/enp98s0.134
/proc/24217/task/24217/net/dev_snmp6/enp98s0.134
/proc/24217/task/24221/net/vlan/enp98s0.134
/proc/24217/task/24221/net/dev_snmp6/enp98s0.134
/proc/24217/task/24222/net/vlan/enp98s0.134
/proc/24217/task/24222/net/dev_snmp6/enp98s0.134
/proc/24217/task/24226/net/vlan/enp98s0.134
/proc/24217/task/24226/net/dev_snmp6/enp98s0.134
/proc/24217/task/24227/net/vlan/enp98s0.134
/proc/24217/task/24227/net/dev_snmp6/enp98s0.134

路径中的第二个数字是 QEMU 进程的 PID。如果您碰巧不知道哪个进程,也可以使用类似的方法:

$ find /proc/* -type f | grep enp98s0.134$ | head
/proc/1/task/1/net/vlan/enp98s0.134
/proc/1/task/1/net/dev_snmp6/enp98s0.134
/proc/1/net/vlan/enp98s0.134
/proc/1/net/dev_snmp6/enp98s0.134
/proc/10/task/10/net/vlan/enp98s0.134
/proc/10/task/10/net/dev_snmp6/enp98s0.134
/proc/10/net/vlan/enp98s0.134
/proc/10/net/dev_snmp6/enp98s0.134
/proc/100/task/100/net/vlan/enp98s0.134
/proc/100/task/100/net/dev_snmp6/enp98s0.134

要解析 PID,请执行以下操作:

$ find /proc/* -type f | grep enp98s0.134$ | awk -F/ '{print $3}' | sort -u | head -5
1
10
100
101070
104

相关内容