仅
/procns像这样“半生不熟”。
因此,如果仅需要2个名称空间,则可以:
- 打开
/proc/1/ns/net
- 取消分享
- 打开
/proc/self/ns/net
并在两者之间切换。
可能需要多于2个
clone()。
/proc/N/ns/net每个进程似乎无法创建多个文件。
但是,如果您不需要在运行时在名称空间之间切换,也不需要与其他进程共享它们,则可以使用许多这样的名称空间:
- 打开套接字并为主要名称空间运行进程。
- 取消分享
- 打开套接字并运行第二个名称空间(netlink,tcp等)的进程
- 取消分享
- …
- 取消分享
- 打开套接字并运行第N个名称空间(netlink,tcp等)的进程
打开的套接字会引用其网络名称空间,因此只有在套接字关闭后才能收集它们。
您还可以使用netlink通过在源名称空间上发送netlink命令,并通过PID或名称空间FD(您没有后者)来指定dst名称空间,从而在名称空间之间移动接口。
您需要在访问
/proc依赖于该名称空间的条目之前切换进程名称空间。打开“ proc”文件后,它将继续引用命名空间。



