次のようなことができます:
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 名前空間は