Můžete udělat něco jako:
netns=myns
find -L /proc/[1-9]*/task/*/ns/net -samefile /run/netns/"$netns" | cut -d/ -f5
Nebo pomocí zsh :
print -l /proc/[1-9]*/task/*/ns/net(e:'[ $REPLY -ef /run/netns/$netns ]'::h:h:t)
Zkontroluje inode souboru, který má /proc/*/task/*/ns/net symbolický odkaz ukazuje na proti těm souborům připojeným pomocí ip netns add v /run/netns . To je v podstatě to, co ip netns identify nebo ip netns pid v novějších verzích iproute2 udělat.
To funguje s jádrem 3.13 od linux-image-generic-lts-trusty balíček na Ubuntu 12.04, ale ne s jádrem 3.2 z prvního vydání 12.04, kde /proc/*/ns/* nejsou symbolické odkazy a každý net soubor z každého procesu a úlohy získá jiný inode, který nemůže pomoci určit příslušnost k jmennému prostoru.
Podpora pro to byla přidána tímto odevzdáním v roce 2011, což znamená, že potřebujete jádro 3.8 nebo novější.
Se staršími jádry můžete zkusit spustit program naslouchající na soketu ABSTRACT ve jmenném prostoru a pak zkusit zadat jmenný prostor každého procesu, abyste zjistili, zda se tam můžete připojit k tomuto soketu, jako:
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
Otázka konkrétně zmiňuje Ubuntu 12.04, ale podotýkám, že na novějších distribucích, jako je 16.04, existuje příkaz, který dělá přesně toto:ip netns pids <nsname>
ps $(ip netns pids myns) kde myns je váš jmenný prostor