Las utilidades para trabajar con espacios de nombres han mejorado desde que se hizo esta pregunta en 2013.
lsns
del paquete util-linux puede enumerar todos los diferentes tipos de espacios de nombres, en varios formatos útiles.
# lsns --help
Usage:
lsns [options] [<namespace>]
List system namespaces.
Options:
-J, --json use JSON output format
-l, --list use list format output
-n, --noheadings don't print headings
-o, --output <list> define which output columns to use
-p, --task <pid> print process namespaces
-r, --raw use the raw output format
-u, --notruncate don't truncate text in columns
-t, --type <name> namespace type (mnt, net, ipc, user, pid, uts, cgroup)
-h, --help display this help and exit
-V, --version output version information and exit
Available columns (for --output):
NS namespace identifier (inode number)
TYPE kind of namespace
PATH path to the namespace
NPROCS number of processes in the namespace
PID lowest PID in the namespace
PPID PPID of the PID
COMMAND command line of the PID
UID UID of the PID
USER username of the PID
For more details see lsns(8).
lsns
solo enumera el PID más bajo para cada proceso, pero puede usar ese PID pgrep
si desea enumerar todos los procesos que pertenecen a un espacio de nombres.
por ejemplo, si estoy ejecutando gitlab en docker y quiero encontrar todos los procesos que se ejecutan en ese espacio de nombres, puedo:
# lsns -t pid -o ns,pid,command | grep gitlab
4026532661 459 /opt/gitlab/embedded/bin/redis-server 127.0.0.1:0
y luego usa ese pid (459) con pgrep
:
# pgrep --ns 459 -a
459 /opt/gitlab/embedded/bin/redis-server 127.0.0.1:0
623 postgres: gitlab gitlabhq_production [local] idle
[...around 50 lines deleted...]
30172 nginx: worker process
También podría usar la identificación del espacio de nombres (4026532661) con ps
, por ejemplo:
ps -o pidns,pid,cmd | awk '$1==4026532661'
[...output deleted...]