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/netsymlink 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 addtrong /run/netns. Về cơ bản đó là những gì ip netns identifyhoặc ip netns pidtrong các phiên bản mới hơn iproute2làm.
Nó hoạt động với kernel 3.13 như từ linux-image-generic-lts-trustygó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 nettệ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(8964pid hiện tại [$$]) - tôi có nên chạy cái này trongdefaultkhông gian tên không?