问题
在Linux系统中,使用clone方法创建一个子进程,通过参数指定子进程的namespace独立于父进程:
1: clone() 传入参数CLONE_NEWNS
2: 使用mount()方法在子进程中挂载文件系统 /tmp
期望看到的是/tmp这个新挂载点只在子进程中可见,父进程不可见。但实际情况却发现 /tmp这个新挂载点,在父进程和子进程中均可见。
代码如下:
#define _GNU_SOURCE
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <sched.h>
#include <signal.h>
#include <unistd.h>
/* 定义一个给 clone 用的栈,栈大小1M */
#define STACK_SIZE (1024 * 1024)
static char container_stack[STACK_SIZE];
char* const container_args[] = {
"/bin/bash",
NULL
};
int container_main(void* arg)
{
printf("Container - inside the container!\n");
sethostname("container_test",20); /* 设置hostname */
/* 直接执行一个shell,以便我们观察这个进程空间里的资源是否被隔离了 */
//mount("none", "/", NULL, MS_PRIVATE, NULL);
mount("none", "/tmp", "tmpfs", 0, ""