特定のネットワークインターフェイスを使用するプロセスを見つける方法はありますか?ここに関連する質問のタイトルは私のニーズに比べてあまりにも具体的です。
私のプロセスが予想されるネットワークインターフェイスで実行されていることを確認する必要があります。
サイエンティフィック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
パスの2番目の数字は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