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