输入一个容器(例如docker rundocker exec)会使的PID进入下一个创建的进程,为什么呢?

例如,在容器中第二个过程下面的图像(ps)中分配了PID 10,而不是PID 2:

linux - pids为什么会在容器中跳跃?-LMLPHP

根据这个answer,Linux似乎是按顺序分配PID的,不是总是这样吗?

最佳答案

与runc的维护者Aleksa Sarai进行了一次交谈,他解释了为什么会这样。

按照设计,golang运行时会产生多个线程来管理一个进程。 runc用golang编写,当在容器中构建/执行时,有很短的时间runc进程在容器内运行(在执行用户请求的可执行文件之前,例如docker exec bash中的bash)。在Linux中,线程和进程都用同一池中的ID标识,因此go运行时线程在容器pid namespace 中计数,导致我描述的pid跳转。

关于linux - pids为什么会在容器中跳跃?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62021904/

10-16 16:46