runc unshare

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"记录要创建的容器中的进程是初始进程

原文地址:https://www.cnblogs.com/dream397/p/13998548.html