我编写了一个小型C程序,仅执行unshare(CLONE_NEWNS),然后执行system(“ bash”)。

手册页指出该进程应具有自己的名称空间。因此,在外壳程序中,我尝试卸载/ cgroup(cgroup安装在原始计算机上)。

当我在计算机上的外壳中进行安装时,/ cgroup也被卸载。我在这里想念什么吗?我以为CLONE_NEWNS是为了让我从进程中卸载文件系统而不影响主系统。

最佳答案

(顺便说一句,您无需编写程序-只需使用unshare(1)实用程序即可)。

它仅在新的名称空间中卸载文件系统,然后将其保留在原始名称空间中-问题是mount使用/etc/mtab生成当前已安装文件系统的列表,而这只是可以更新的普通文件通过新名称空间中的mount命令。这意味着/etc/mtab与实际发生的事情不同步(因为只有一个/etc/mtab,但是有两个装载名称空间)。

请改为检查/proc/mounts,以查看当前名称空间中实际安装了什么。

09-20 07:29