#define _GNU_SOURCE
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <sched.h>
#include <signal.h>
#include <unistd.h>
#define STACK_SIZE (1024*1024)
static char child_stack[STACK_SIZE];
char *const child_args[] = {
"/bin/bash",
NULL
};
int child_main(void *args)
{
printf("in child process \n");
sethostname("NewNameSpace", 20);
execv(child_args[0], child_args);
return 1;
}
int main()
{
printf("process start: \n");
int child_pid = clone(child_main, child_stack + STACK_SIZE, CLONE_NEWUTS|SIGCHLD, NULL);
waitpid(child_pid, NULL, 0);
printf("end \n");
return 0;
}
1、UTS命名空间,提供了主机名和域名的隔离。
运行结果如下:
[root@localhost code]# ./a.out
process start:
in child process
[root@NewNameSpace code]#
[root@NewNameSpace code]# exit
exit
end
[root@localhost code]#
[root@localhost code]# uname -a
Linux NewNameSpace 3.10.0-514.6.1.el7.x86_64 #1 SMP Wed Jan 18 13:06:36 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost code]#