ネットワークネームスペースに属するプロセスを一覧表示するには?

ネットワークネームスペースに属するプロセスを一覧表示するには?

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/netnsip netns identifyip netns pid新しいバージョンのiproute2do。

これはlinux-image-generic-lts-trustyUbuntu 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

おすすめ記事