输入一个容器(例如docker run
或docker exec
)会使的PID进入下一个创建的进程,为什么呢?
例如,在容器中第二个过程下面的图像(ps
)中分配了PID 10,而不是PID 2:
根据这个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/