Bạn có thể làm một cái gì đó như:
netns=myns
find -L /proc/[1-9]*/task/*/ns/net -samefile /run/netns/"$netns" | cut -d/ -f5
Hoặc với zsh
:
print -l /proc/[1-9]*/task/*/ns/net(e:'[ $REPLY -ef /run/netns/$netns ]'::h:h:t)
Nó kiểm tra nút inode của tệp mà /proc/*/task/*/ns/net
symlink trỏ tới một lần nữa với các tệp được liên kết gắn kết ip netns add
trong /run/netns
. Về cơ bản đó là những gì ip netns identify
hoặc ip netns pid
trong các phiên bản mới hơn iproute2
làm.
Nó hoạt động với kernel 3.13 như từ linux-image-generic-lts-trusty
gói trên Ubuntu 12.04, nhưng không hoạt động với kernel 3.2 từ bản phát hành đầu tiên 12.04 /proc/*/ns/*
không có liên kết tượng trưng và mỗi net
tệp ở đó từ mọi quy trình và tác vụ đều có một inode khác nhau không thể giúp xác định không gian tên thành viên.
Hỗ trợ cho điều đó đã được thêm vào bởi cam kết đó vào năm 2011, có nghĩa là bạn cần kernel 3.8 hoặc mới hơn.
Với các nhân cũ hơn, bạn có thể thử và chạy chương trình nghe trên ổ cắm ABSTRACT trong không gian tên, sau đó thử nhập không gian tên của mọi quy trình để xem bạn có thể kết nối với ổ cắm đó ở đó không:
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
bash
), nhưng tôi gặp lỗi khi chạyfind -L /proc/*/task/*/ns/net -samefile /run/netns/"$netns" find: '/proc/self/task/8964/ns/net': No such file or directory
(8964
pid hiện tại [$$
]) - tôi có nên chạy cái này trongdefault
không gian tên không?