输入容器(例如docker run
或docker exec
)会使next创建的进程的PID向前跳,为什么?
例如,在容器(ps
)中第二个过程下面的图像中,分配了PID 10,而不是PID 2:
据此answer,Linux似乎是按顺序分配PID,不是总是这样吗?
与runc的维护者Aleksa Sarai进行了一次交谈,他解释了为什么会这样。
根据设计,golang运行时会产生多个线程来管理一个进程。 runc用golang编写,并且在构建/执行到容器中时,有很短的时间runc进程在容器内运行(在执行用户请求的可执行文件之前,例如docker exec bash
中的bash)。在Linux中,线程和进程都用同一池中的ID标识,因此go运行时线程在容器pid名称空间中计数,导致我描述的pid跳转。