进入容器(例如docker run或docker exec)会使next创建的进程的PID提前,为什么?
例如,在容器中的第二个进程(ps)下面的图像中分配PID 10,而不是PID 2:

根据这个回答,Linux似乎是按顺序分配PID的,不是总是这样吗?
发布于 2020-05-30 19:00:43
曾与runc的维护人员Aleksa Sarai交谈过,他解释了为什么会发生这种情况。
通过设计,golang运行时生成几个线程来管理一个进程。龙克是用golang编写的,当构建/执行到容器中时,在容器内运行runc进程的时间很短(在提取用户请求的可执行文件之前,例如docker exec bash中的bash )。在Linux中,线程和进程都是用来自同一个池的ids标识的,因此go运行时线程被计算在容器pid命名空间中,导致了我所描述的pid跳转。
https://stackoverflow.com/questions/62021904
复制相似问题