欢迎光临散文网 会员登陆 & 注册

深究Runc源码-5-Exec流程分析

2022-11-16 18:29 作者:黑暗光影DIY  | 我要投稿

代码基于1.1.0

runc exec在容器中启动另一个进程。流程类似runc start和runc create的部分融合,首先类似runc start 通过getContainer重新构建Container实例,再根据命令行参数构建新Process实例,最后组成runner

例如执行runc exec mycontainer bash

Process实例如下,相较于create流程,Init字段为false

runner实例如下,相较于create流程,action为CT_ACT_RUN

runner.run流程同create,区别在于action为CT_ACT_RUN,流程走到了Container.Run

Container.Run流程如下,同create,流程走到了Container.Start,Container.Start流程中相较于create流程,区别在于流程都走到了Init false的分支

在构建parentProcess时,实例化的是setnsProcess,如下

setnsProcess 执行runc init流程同runc create,但区别是nsexec收到的config.cloneflags是0,config.namespaces是runc create时 runc init创建的namespaces,会调用join_namespaces setns将进程加入到 create时创建的namespaces,例如:      

在newContainerInit逻辑中,根据initType==setns,实例化linuxSetnsInit对象,如下:

最后调用system.Execv执行Process

开源的东西,不需要说明出处,就说你自己写的

深究Runc源码-5-Exec流程分析的评论 (共 条)

分享到微博请遵守国家法律