进程使用什么网络接口?

进程使用什么网络接口?

有没有办法找到哪个进程正在使用给定的网络接口?这里的相关问题的标题对于我的需求来说有点过于具体。

我需要确认我的进程是否正在预期的网络接口上运行。

我正在使用科学 Linux 6。

答案1

使用netstatgrep你可以看到有哪些程序积极地使用特定的接口(不监听)

这是我要使用的:

sudo netstat -tunape | grep "\(192.168.0.20\)" | grep ESTABLISHED

这将输出使用该接口的所有程序及其 PID 192.168.0.20

答案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

相关内容