GNU/Linux >> Tutoriels Linux >  >> Linux

Comment lister les processus appartenant à un espace de noms réseau ?

Vous pourriez faire quelque chose comme :

netns=myns
find -L /proc/[1-9]*/task/*/ns/net -samefile /run/netns/"$netns" | cut -d/ -f5

Ou avec zsh :

print -l /proc/[1-9]*/task/*/ns/net(e:'[ $REPLY -ef /run/netns/$netns ]'::h:h:t)

Il vérifie l'inode du fichier dont le /proc/*/task/*/ns/net le lien symbolique pointe vers ceux des fichiers montés en liaison par ip netns add en /run/netns . C'est essentiellement ce que ip netns identify ou ip netns pid dans les nouvelles versions de iproute2 faire.

Cela fonctionne avec le noyau 3.13 à partir du linux-image-generic-lts-trusty package sur Ubuntu 12.04, mais pas avec le noyau 3.2 de la première version de 12.04 où /proc/*/ns/* ne sont pas des liens symboliques et chaque net le fichier de chaque processus et tâche obtient un inode différent qui ne peut pas aider à déterminer l'appartenance à l'espace de noms.

La prise en charge de cela a été ajoutée par ce commit en 2011, ce qui signifie que vous avez besoin du noyau 3.8 ou plus récent.

Avec les noyaux plus anciens, vous pouvez essayer d'exécuter un programme écoutant sur une socket ABSTRACT dans l'espace de noms, puis essayer d'entrer l'espace de noms de chaque processus pour voir si vous pouvez vous connecter à cette socket comme :

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

La question mentionne spécifiquement Ubuntu 12.04, mais je note que sur les distributions plus récentes comme 16.04, il existe une commande qui fait exactement cela :ip netns pids <nsname>


ps $(ip netns pids myns)myns est votre espace de noms


Linux
  1. Linux - Comment répertorier les espaces de noms sous Linux ?

  2. Comment accéder à l'espace de noms réseau du conteneur Docker à partir de l'hôte

  3. Comment répertorier les processus attachés à un segment de mémoire partagée sous Linux ?

  4. Comment afficher la liste des processus en cours d'exécution Python ?

  5. Comment déplacer la connexion sans fil vers un autre espace de noms de réseau ?

Comment lister les groupes sous Linux

Comment répertorier les tâches Cron sous Linux

Comment utiliser Angry IP Scanner (Scanner réseau)

Comment partager une imprimante sur le réseau sous Linux

Comment utiliser la commande PS

Comment redémarrer le réseau sur Ubuntu 22.04