PID为什么在容器中跳跃?

问题描述 投票:1回答:1

输入容器(例如docker rundocker exec)会使next创建的进程的PID向前跳,为什么?

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

example

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

linux docker containers pid
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.