void nsexec(void)
unshare(CLONE_NEWUSER)
http://www.sel.zju.edu.cn/?p=840
Namespace API提供了三种系统调用接口:
● clone():创建新的进程
● setns():允许指定进程加入特定的namespace
● unshare():将指定进程移除指定的namespace
nsexec.c分别使用这三种接口,对于一般新建命名空间,使用unshare()实现;对于已有的命名空间,使用setns()实现。
cmd 记录了要执行的可执行文件名,即 "/proc/self/exe init",注意不要和容器要执行的 sleep 5 混淆了
cmd.Env 记录了名为 _LIBCONTAINER_FIFOFD=%d 记录的命名管道exec.fifo 的描述符,名为_LIBCONTAINER_INITPIPE=%d记录了创建的 SocketPair 的 childPipe 一端的描述符,名为_LIBCONTAINER_INITTYPE="standard"记录要创建的容器中的进程是初始进程