1
私は、その親とは異なるmnt名前空間を持つプロセスを作成しようとしています。そのために異なるマウント名前空間を持つLinuxでのプロセスの作成
、私は次のコードを使用します。それを実行している場合
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);
}
、私は別のMNT名前空間で実行して、bashシェルを入手できます。 これを確認するために、別のシェルsudo ls -l /proc/<child_pid>/ns
で実行します。実際には、子プロセスがシステム内の残りのプロセスと異なる名前空間を持つことがわかりました。
しかし、両方のシェルからmount
を実行すると、同じFSTAB出力が得られ、どちらもその行にmyfs on /myfs type sysfs (rw,relatime)
が表示されます。
これについての説明は何ですか?
作品!ありがとう!私はどのようにCコードからそれを行うことができますか? – Noamiko
私は方法がわからないことを認める必要があります。また、システム全体に影響を及ぼすため、このアクションはプロセスによって暗黙的にではなく管理者が行うべきだと主張します。しかし確かに、 'mount'は' C'で書かれているので道があります。私は 'mount'コマンドのコードを読むことをお勧めします。 – hek2mgl