GNU/Linux >> Linux の 問題 >  >> Linux

ネットワーク名前空間に属するプロセスを一覧表示する方法は?

次のようなことができます:

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 のファイルの inode をチェックします。 symlink は ip netns add によってバインドマウントされたファイルのものを指します /run/netns で .それが基本的に ip netns identify です または ip netns pid iproute2 の新しいバージョンでは

linux-image-generic-lts-trusty 以降の 3.13 カーネルで動作します。 Ubuntu 12.04 のパッケージですが、12.04 の最初のリリースの 3.2 カーネルではなく /proc/*/ns/* シンボリックリンクではなく、各 net すべてのプロセスとタスクからそこにあるファイルは、名前空間のメンバーシップを決定するのに役立つ異なる inode を取得します。

そのサポートは 2011 年のコミットによって追加されました。つまり、カーネル 3.8 以降が必要です。

古いカーネルでは、名前空間の ABSTRACT ソケットをリッスンするプログラムを実行してから、すべてのプロセスの名前空間に入って、そのソケットに接続できるかどうかを確認することができます:

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

質問は特にUbuntu 12.04に言及していますが、16.04のような新しいディストリビューションには、まさにこれを行うコマンドがあることに注意してください:ip netns pids <nsname>


ps $(ip netns pids myns) どこで myns 名前空間は


Linux
  1. Linux – Linuxで名前空間を一覧表示する方法は?

  2. ホストから Docker コンテナのネットワーク名前空間にアクセスする方法

  3. 実行中のプロセスPythonのリストを表示するには?

  1. Linuxで共有メモリセグメントに接続されているプロセスを一覧表示する方法は?

  2. Windows SMB ネットワーク共有内のすべてのファイルを一覧表示する方法

  3. ワイヤレス接続を他のネットワーク名前空間に移動するには?

  1. PostgreSQLですべてのデータベースを一覧表示する方法

  2. LinuxSSコマンドの使用方法

  3. Linuxで実行中のプロセスを一覧表示する方法