我对这里发生的事情有点困惑。我正在遵循一个指南,其中在设置了 CLONE_NEWNS 标志的情况下调用克隆后添加了一个新的挂载点。挂载点应该只存在于子进程中。我正在尝试更改新的文件系统名称空间,它似乎会影响父名称空间。
我的 c 程序非常简单。Main 将调用 clone
pid_t pid = clone(child_exec,c_stack, SIGCHLD | CLONE_NEWNS | CLONE_NEWPID ,args);
args 是一个聊天数组,其中包含要执行的命令。
int child_exec(void *arg)
{
int err =0;
char **commands = (char **)arg;
mount("none", "/mytmp", "tmpfs", 0, "");
execvp(commands[0],commands);
return 0;
}
如果传递给 execvp 的命令是mount
我希望输出包含 /mytmp 挂载点,并mount
在程序退出后再次运行命令以看不到 /mytmp 出现。那没有发生。当调用 execvp 以及运行 mount 之后,我在外面看到它。
我尝试使用 MS_PRIVATE 标志安装并使用unshare(CLONE_FS);
我也遇到了类似的问题,我试图从子进程中卸载 /proc 并且 get resource is busy 错误。我认为新命名空间不应该发生这种情况。