Apakah ada metode di Linux untuk mendaftar semua ruang nama di Host yang sedang berjalan? Saya perlu memeriksa ruang nama untuk proses tertentu (misalnya proses yang berjalan di LXC-container dan semua proses lain di host) dan kemudian mencari tahu cgroup dari mereka.
Jawaban yang Diterima:
Utilitas untuk bekerja dengan ruang nama telah meningkat sejak pertanyaan ini diajukan pada 2013.
lsns
dari paket util-linux dapat membuat daftar semua jenis ruang nama yang berbeda, dalam berbagai format yang berguna.
# 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
hanya mencantumkan PID terendah untuk setiap proses – tetapi Anda dapat menggunakan PID tersebut dengan pgrep
jika Anda ingin membuat daftar semua proses milik namespace.
misalnya jika saya menjalankan gitlab di buruh pelabuhan dan ingin menemukan semua proses yang berjalan di namespace itu, saya dapat:
# lsns -t pid -o ns,pid,command | grep gitlab
4026532661 459 /opt/gitlab/embedded/bin/redis-server 127.0.0.1:0
dan, kemudian gunakan pid itu (459) dengan 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
Saya juga bisa menggunakan id namespace (4026532661) dengan ps
, misalnya:
ps -o pidns,pid,cmd | awk '$1==4026532661'
[...output deleted...]