Почему pid прыгают в контейнере? - PullRequest
1 голос
/ 26 мая 2020

Ввод контейнера (например, docker run или docker exec) заставляет PID следующего созданного процесса перемещаться вперед, почему?

Например, на изображении под второму процессу в контейнере (ps) назначается PID 10, а не PID 2:

example

Согласно этому ответ, Linux, похоже, назначает PID в последовательности, не всегда ли это так?

1 Ответ

0 голосов
/ 30 мая 2020

Поговорил с одним из сопровождающих запуска c, Алексой Сарай, и он объяснил, почему это происходит.

По замыслу, среда выполнения golang порождает несколько потоков для управления процессом. run c записывается в golang, и при сборке / запуске в контейнер существует короткое время, когда процесс run c выполняется внутри контейнера (перед запуском запрошенного пользователем исполняемого файла , например, bash в docker exec bash). В Linux потоки и процессы идентифицируются с помощью идентификаторов из одного пула, поэтому потоки времени выполнения go подсчитываются в пространстве имен pid контейнера, что приводит к описанному мной скачку pid.

...