Advertisement

编写Docker容器代码实现管道功能与环境变量识别功能模块

阅读量:

通道通信

在创建两个Linux进程中,进程之间的通信通常会采用通道机制.所谓的管道,就是用来连接两个进程的通道.

一般管道有两种

无名通道
存在于有亲缘关系的进程之间

有名通道
存在于文件系统的管道.(FIFO管道)

就其本质而言,可以说管道也是一种文件,在进行数据传输的过程中存在特殊之处:即它具备缓冲区功能。值得注意的是,在进行 writes 操作的进程中一旦发现内存已满,则会触发阻塞状态;而在读取操作时如果发现管道为空,则会导致读取进程陷入阻塞状态。

1.用户启动Run

复制代码
    func Run(tty bool, commandArray[] string, res *subsystems.ResourceConfig){
    
    	parent, writePipe := container.NewParentProcess(tty)
    
    	if parent == nil {
    		log.Errorf("创建新的进程失败")
    	}
    
    	if err := parent.Start();err != nil {
    		/*
    		会调用前面创建的command的进程
首先clone出来一个namespace隔离的进程
在子进程中,调用/proc/self/exe 也就

全部评论 (0)

还没有任何评论哟~