GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie listet man Prozesse auf, die zu einem Netzwerk-Namespace gehören?

Sie könnten so etwas tun:

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

Oder mit zsh :

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

Es überprüft den Inode der Datei, die /proc/*/task/*/ns/net Symlink zeigt auf die der Dateien, die durch ip netns add eingebunden wurden in /run/netns . Das ist im Grunde was ip netns identify oder ip netns pid in neueren Versionen von iproute2 tun.

Das funktioniert mit dem 3.13 Kernel ab dem linux-image-generic-lts-trusty Paket auf Ubuntu 12.04, aber nicht mit dem 3.2-Kernel aus der ersten Version von 12.04, wo /proc/*/ns/* sind keine Symlinks und jeweils net Datei dort von jedem Prozess und jeder Aufgabe erhält einen anderen Inode, der nicht helfen kann, die Namespace-Mitgliedschaft zu bestimmen.

Die Unterstützung dafür wurde 2011 durch diesen Commit hinzugefügt, was bedeutet, dass Sie Kernel 3.8 oder neuer benötigen.

Bei älteren Kerneln könnten Sie versuchen, ein Programm auszuführen, das auf einem ABSTRACT-Socket im Namensraum lauscht, und dann versuchen, den Namensraum jedes Prozesses einzugeben, um zu sehen, ob Sie dort eine Verbindung zu diesem Socket herstellen können, wie:

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

Die Frage erwähnt ausdrücklich Ubuntu 12.04, aber ich stelle fest, dass es auf neueren Distributionen wie 16.04 einen Befehl gibt, der genau dies tut:ip netns pids <nsname>


ps $(ip netns pids myns) wobei myns ist Ihr Namespace


Linux
  1. Linux – Wie listet man Namespaces in Linux auf?

  2. So greifen Sie vom Host auf den Netzwerk-Namespace des Docker-Containers zu

  3. Wie listet man Prozesse auf, die an ein Shared-Memory-Segment in Linux angehängt sind?

  4. Wie zeige ich eine Liste der laufenden Prozesse Python an?

  5. Wie verschiebe ich eine drahtlose Verbindung in einen anderen Netzwerk-Namespace?

Wie man Gruppen in Linux auflistet

Wie man Cron-Jobs unter Linux auflistet

So verwenden Sie den Angry IP Scanner (Netzwerkscanner)

So teilen Sie den Drucker im Netzwerk unter Linux

So verwenden Sie den PS-Befehl

So starten Sie das Netzwerk unter Ubuntu 22.04 neu