有没有办法找到哪个进程正在使用给定的网络接口?这里的相关问题的标题对于我的需求来说有点过于具体。
我需要确认我的进程是否正在预期的网络接口上运行。
我正在使用科学 Linux 6。
答案1
使用netstat
,grep
你可以看到有哪些程序积极地使用特定的接口(不监听)
这是我要使用的:
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