Các tiện ích để làm việc với các không gian tên đã được cải thiện kể từ khi câu hỏi này được hỏi vào năm 2013.
lsns
từ gói linux-linux có thể liệt kê tất cả các loại không gian tên khác nhau, ở các định dạng hữu ích khác nhau.
# 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
chỉ liệt kê PID thấp nhất cho mỗi quy trình - nhưng bạn có thể sử dụng PID đó pgrep
nếu bạn muốn liệt kê tất cả các quy trình thuộc về một không gian tên.
ví dụ: nếu tôi đang chạy gitlab trong docker và muốn tìm tất cả các tiến trình đang chạy trong không gian tên đó, tôi có thể:
# lsns -t pid -o ns,pid,command | grep gitlab
4026532661 459 /opt/gitlab/embedded/bin/redis-server 127.0.0.1:0
và, sau đó sử dụng pid đó (459) với 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
Tôi cũng có thể sử dụng id không gian tên (4026532661) với ps
, vd:
ps -o pidns,pid,cmd | awk '$1==4026532661'
[...output deleted...]