Você pode fazer algo como:
netns=myns
find -L /proc/[1-9]*/task/*/ns/net -samefile /run/netns/"$netns" | cut -d/ -f5
Ou com zsh :
print -l /proc/[1-9]*/task/*/ns/net(e:'[ $REPLY -ef /run/netns/$netns ]'::h:h:t)
Ele verifica o inode do arquivo para o qual o link simbólico /proc/*/task/*/ns/net aponta para os arquivos montados por ip netns add in /run/netns . Isso é basicamente o que ip netns identify ou ip netns pid nas versões mais recentes de iproute2 do.
Isso funciona com o kernel 3.13 a partir do pacote linux-image-generic-lts-trusty no Ubuntu 12.04, mas não com o kernel 3.2 da primeira versão do 12.04, onde /proc/*/ns/* não são symlinks e cada net de cada processo e tarefa recebe um inode diferente que não pode ajudar a determinar a associação ao namespace.
O suporte para isso foi adicionado por que se compromete em 2011, o que significa que você precisa do kernel 3.8 ou mais recente.
Com kernels mais antigos, você poderia tentar executar um programa escutando em um soquete ABSTRACT no namespace, e então tentar entrar no namespace de cada processo para ver se você pode se conectar a esse socket lá como:
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