GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo enumerar los procesos que pertenecen a un espacio de nombres de red?

Podrías hacer algo como:

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

O con zsh :

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

Comprueba el inodo del archivo que el /proc/*/task/*/ns/net el enlace simbólico apunta a los de los archivos enlazados por ip netns add en /run/netns . Eso es básicamente lo que ip netns identify o ip netns pid en versiones más nuevas de iproute2 hacer.

Eso funciona con el kernel 3.13 a partir del linux-image-generic-lts-trusty paquete en Ubuntu 12.04, pero no con el kernel 3.2 de la primera versión de 12.04 donde /proc/*/ns/* no son enlaces simbólicos y cada net el archivo allí de cada proceso y tarea obtiene un inodo diferente que no puede ayudar a determinar la membresía del espacio de nombres.

Ese compromiso agregó soporte para eso en 2011, lo que significa que necesita el kernel 3.8 o más reciente.

Con kernels más antiguos, podría intentar ejecutar un programa escuchando en un socket ABSTRACT en el espacio de nombres, y luego intentar ingresar el espacio de nombres de cada proceso para ver si puede conectarse a ese socket allí 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

La pregunta menciona específicamente Ubuntu 12.04, pero observo que en distribuciones más nuevas como 16.04 hay un comando que hace exactamente esto:ip netns pids <nsname>


ps $(ip netns pids myns) donde myns es su espacio de nombres


Linux
  1. Linux:¿cómo enumerar los espacios de nombres en Linux?

  2. Cómo acceder al espacio de nombres de red del contenedor Docker desde el host

  3. ¿Cómo enumerar los procesos adjuntos a un segmento de memoria compartida en Linux?

  4. ¿Cómo mostrar la lista de procesos en ejecución de Python?

  5. ¿Cómo mover la conexión inalámbrica a otro espacio de nombres de red?

Cómo enumerar grupos en Linux

Cómo listar trabajos cron en Linux

Cómo usar Angry IP Scanner (escáner de red)

Cómo compartir la impresora en la red en Linux

Cómo usar el comando PS

Cómo reiniciar la red en Ubuntu 22.04