专栏首页KubernetesrunC源码分析——主体调用链

runC源码分析——主体调用链

本文将简单的对runC的源码调用主体逻辑进行梳理,为跟系统的阅读runC源码。 ##runC总体调用逻辑 下图中,runC源码逻辑跳转流程总体上分为三步: main入口 ——> runC处理 ——> libcontainer处理。

runC其实就是在libcontainer的基础上进行了封装成各个Command。

具体runC的各个Command的调用链见如下:

##runC处理

###checkpoint

checkpointCommand(main.go) —> checkpointCommand(checkpoint.go)

###container

createCommand(main.go)—>createCommand(create.go)—>startContainer(untils_linux.go)—>run(untils_linux.go) deleteCommand(main.go)—>deleteCommand(delete.go)—>destroy(untils_linux.go) eventsCommand(main.go)—>eventsCommand(events.go) execCommand(main.go)—>execCommand(exec.go)—>execProcess(exec.go)->run(untils_linux.go) initCommand(main.go)—>initCommand(main_unix.go) killCommand(main.go)—>killCommand(kill.go) listCommand(main.go)—>getContainers(list.go) pauseCommand(main.go) —>pauseCommand(pause.go) psCommand(main.go)—>psCommand(ps.go) restoreCommand(main.go)—>restoreCommand(restore.go)—>restoreContainer(restore.go) resumeCommand(main.go)—>resumeCommand(pause.go) runCommand(main.go)—>runCommand(run.go)—>startContainer(untils_linux.go) specCommand(main.go)—>specCommand(spec.go) end startCommand(main.go)—>startCommand(start.go) stateCommand(main.go)—>stateCommand(state.go) updateCommand(main.go)—>updateCommand(update.go)

##runC to libcontainer ###checkpoint

checkpointCommand(checkpoint.go)—> Checkpoint(libcontainer/container_linux.go) ###container run(untils_linux.go)—>Run(libcontainer/container_linux.go) destroy(untils_linux.go)—>Destroy(libcontainer/container_linux.go) eventsCommand(events.go)—>Status(libcontainer/container_linux.go) execProcess(exec.go)—>Status\Stopped\State(libcontainer/container_linux.go) || run(untils_linux.go)—>Start\Run\Destroy(libcontainer/container_linux.go) initCommand(main_unix.go)—>StartInitialization(libcontainer/factory_linux.go) killCommand(kill.go)—>Signal(libcontainer/container_linux.go) getContainers(list.go)—>Status\State\Stopped(libcontainer/container_linux.go) pauseCommand(pause.go)—>Pause(libcontainer/container_linux.go) psCommand(ps.go)—>exec.Command("ps", psArgs...).Output() restoreContainer(restore.go)—>Restore(libcontainer/container_linux.go) resumeCommand(pause.go)—>Resume(libcontainer/container_linux.go) startContainer(untils_linux.go)—>Run(libcontainer/factory.go) startCommand(start.go)—>Exec(libcontainer/container_linux.go) stateCommand(state.go)—>State(libcontainer/container_linux.go) updateCommand(update.go)—>Set(libcontainer/container_linux.go)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Kubernetes Scheduler源码分析

    本文是对Kubernetes 1.5的Scheduler源码层面的剖析,包括对应的源码目录结构分析、kube-scheduler运行机制分析、整体代码流程图、核...

    Walton
  • Golang性能调优(go-torch, go tool pprof)

    Go语言已经为开发者内置配套了很多性能调优监控的好工具和方法,这大大提升了我们profile分析的效率。此外本文还将重点介绍和推荐uber开源的go-torch...

    Walton
  • 劫持系统函数Demo

    以下内容是劫持glib.c中标准printf函数的方法。是这篇 Docker容器内的监控命令数据修正思路的基础知识。对LD_PRELOAD熟悉可以不看。 ##劫...

    Walton
  • 简单围观一下有趣的 //go: 指令

    如果你平时有翻看源码的习惯,你肯定会发现。咦,怎么有的方法上面总是写着 //go: 这类指令呢。他们到底是干嘛用的?

    李海彬
  • Go 语言分享

    Go 语言从 2009 年发布第一版开始,逐渐变的流行,被人所熟知,但是很多人可能听说过 go,但是对 go 的特性并不是很了解,这里主要介绍 go 的一些关键...

    serena
  • GO笔记之GO命令快速体验

    本文将在所能及的范围内,尽量地介绍GO提供的所有命令,从而实现对它们有个整体的认识。

    波罗学
  • 【从零开始学习Go语言】四.Go常用命令释义

    go run 命令用于编译并运行命令源码文件,如果你用vim编辑go文件并希望他暂时跑起来查看效果,使用此命令:go run file_name

    一只特立独行的兔先生
  • 还在为Go依赖安装不上烦恼?

    打开VSCode后,新建一个xx.go文件,右下角会提示安装模块,选择install all:

    公众号guangcity
  • go 命令

    建议使用 -gcflags "-N -l" 参数关闭编译器代码优化和函数 内联,避免断点和单步执行无法准确对应源码行,避免小函数和局部变量被优化掉。-o 指定存...

    solate
  • go语言入门

    激活码 https://www.cnblogs.com/pig66/p/10420947.html

    lilugirl

扫码关注云+社区

领取腾讯云代金券