Linux命名空间:networking命名空间是否可以存在而不与进程关联?

ip netns创build对/var/run/ns (命名的)networking命名空间的引用,这可以很容易地被跟踪。 同样,可以通过/proc/[pid]/ns/net来确定。 但是,一些自定义程序可能会创build一个networking并将相应的inode保存在其他非常规位置。 这可能难以确定是否有净ns我们可以列出。

其次,当进程退出时, unshare <cmd>会破坏networking,这很好。 但是,即使在命令/进程退出之后, ip netns exec <netns> <cmd>仍将保留ns。 所以我相信,任何自定义程序都可以做到这一点。

因此,问题是:一个自定义程序是否有可能创build一个未命名的networkingns,并且它与任何进程都没有关联

此外,是否有可能从用户空间列出这样的(隐藏的)ns,因为我们不知道到inode的path? (当然内核有一个ns的链表)一段代码会有帮助。

自定义程序是否有可能创build一个未命名的networkingns,并且它与任何进程都不关联?

是的,这是可能的。 根据Linux命名空间手册页( http://man7.org/linux/man-pages/man7/namespaces.7.html ):

每个进程都有一个/ proc / [pid] / ns /子目录,其中每个命名空间包含一个支持被setns(2)操作的条目:

将此目录中的某个文件绑定到文件系统中的某个位置(即mount(2)),即使当前在命名空间中的所有进程都终止,也会使由pid指定的进程的相应命名空间保持活动状态。

关于另一个问题:

是否有可能从用户空间列出这样的(隐藏的)ns,因为我们不知道inodes的path?

如果考虑第一个问题的上述引用,通过检查绑定path,您应该能够find这些隐藏的名称空间