Ubuntu 12.04を使用していますが、ip
ユーティリティにオプションがありませんip netns identify <pid>
。新しくインストールしようとしましたが、iproute
まだオプションがあります確認するうまくいかないようです!
ネットワークネームスペース内のすべてのプロセスを一覧表示するか、PIDを提供してプロセスが属するネットワークネームスペースを表示するスクリプト(またはコード)を作成するにはどうすればよいですか? (正しいことを確認するには、一部のプロセスに関する情報が必要ですnetns
。)
ベストアンサー1
次のことができます。
netns=myns
find -L /proc/[1-9]*/task/*/ns/net -samefile /run/netns/"$netns" | cut -d/ -f5
または以下を使用してzsh
:
print -l /proc/[1-9]*/task/*/ns/net(e:'[ $REPLY -ef /run/netns/$netns ]'::h:h:t)
/proc/*/task/*/ns/net
バインドにマウントされたファイルのアノードに対してシンボリックリンクが指すファイルのアノードを確認します。基本的にそれがあるip netns add
/run/netns
ip netns identify
ip netns pid
新しいバージョンのiproute2
do。
これはlinux-image-generic-lts-trusty
Ubuntu 12.04パッケージの3.13カーネルでは機能しますが、12.04の最初のバージョンの3.2カーネルでは機能しません。ここでは/proc/*/ns/*
シンボリックリンクがなく、net
各プロセスとジョブの各ファイルが異なるinodeを取得するため、名前空間を決定するのに役立ちません。メンバー。
これは以下でサポートされます。その約束2011年にはカーネル3.8以上が必要だという意味です。
以前のカーネルでは、名前空間の抽象ソケットを受け取るプログラムを実行し、各プロセスの名前空間を入力して、次のようにソケットに接続できることを確認できます。
sudo ip netns exec "$netns" socat abstract-listen:test-ns,fork /dev/null &
ps -eopid= |
while read p; do
nsenter -n"/proc/$p/ns/net" socat -u abstract:test-ns - 2> /dev/null &&
echo "$p"
done