gpt4 book ai didi

linux - 在 Linux 中使用不同的挂载命名空间创建进程

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:24:02 26 4
gpt4 key购买 nike

我正在尝试创建一个与其父进程具有不同 mnt 命名空间的进程。

为此,我使用以下代码:

static int childFunc(void *arg){
if (mount("/","/myfs", "sysfs", 0, NULL) == -1)
errExit("mount");
printf("Starting new bash. Child PID is %d\n",getpid());
execle("/bin/bash",NULL);
printf("Shouldn't arrive here.\n");
return 0; /* Child terminates now */
}

#define STACK_SIZE (1024 * 1024) /* Stack size for cloned child */

int main(int argc, char *argv[]){
char *stack; /* Start of stack buffer */
char *stackTop; /* End of stack buffer */
pid_t pid;

/* Allocate stack for child */
stack = malloc(STACK_SIZE);
if (stack == NULL)
errExit("malloc");
stackTop = stack + STACK_SIZE; /* Assume stack grows downward */

/* Create child that has its own MNT namespaces*/
pid = clone(childFunc, stackTop, CLONE_NEWNS | SIGCHLD, argv[1]);
if (pid == -1)
errExit("clone");
printf("clone() returned %ld\n", (long) pid);
sleep(1);

if (waitpid(pid, NULL, 0) == -1) /* Wait for child */
errExit("waitpid");
printf("child has terminated\n");
exit(EXIT_SUCCESS);
}

运行它时,我得到了一个 bash shell,在不同的 MNT 命名空间中运行。为了验证,我在另一个shell中执行sudo ls -l /proc/<child_pid>/ns ,我确实看到子进程与系统中的其余进程具有不同的命名空间。

但是,如果我执行 mount从这两个 shell - 我得到相同的 FSTAB 输出,以及行 myfs on /myfs type sysfs (rw,relatime)出现在他们两个。

对此有何解释?

最佳答案

在创建新命名空间之前,您需要将现有挂载标记为“私有(private)”:

mount --make-rprivate /

关于linux - 在 Linux 中使用不同的挂载命名空间创建进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38311697/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com