要保留命名空间,请在哪个 /proc/PID 上创建绑定安装点?

要保留命名空间,请在哪个 /proc/PID 上创建绑定安装点?

https://man7.org/linux/man-pages/man1/n.1.html:

默认情况下,只有当新命名空间至少有一个成员进程时,它才会存在。通过绑定安装相应的 /proc/PID/ns/ns 类型文件,可以使命名空间持久化,即即使没有成员进程,也可以固定存在。

绑定安装源的文件路径中使用了哪个 PID?创建命名空间时绑定挂载点的全部意义不就是命名空间不依赖于 PID 的存在吗?

如果我clone()使用该CLONE_NEWNET标志创建一个网络命名空间,然后使用创建的新进程的 PID 创建一个绑定挂载,然后我终止该新进程,我会认为该/proc/PID/ns/net文件消失了,但随后该文件/var/run/netns/<netns name>也会被删除,网络命名空间不会持续存在。

答案1

在进程中运行的用户态软件无法在任何进程之外创建命名空间。

因此,您可以使用命名空间创建进程(或其子进程之一)的 PI​​D。

如果我使用 CLONE_NEWNET 标志使用 clone() 创建一个网络命名空间,然后使用创建的新进程的 PID 创建一个绑定挂载,然后我杀死新进程,我会认为 /proc/PID/ns/ .net 文件消失,

让我们在这里使用带有大引号的“文件”。虚拟文件系统条目消失了,但是......

但 /var/run/netns/ 也会被删除

“删除”是您对实际文件所做的操作,它在这里不适用。 PID 将消失,但是您可以作为包含该 PID 的路径下的某些虚拟文件系统条目访问的内容将变得无法访问方式。但:

但随后 /var/run/netns/ 也会被删除,并且网络命名空间不会持续存在。

是错误的,因为绑定挂载会添加对命名空间的内核内部引用,这样它就不会变得未使用,因此将持续存在。

相关内容