Найти логический родительский pid контейнера - PullRequest
1 голос
/ 21 марта 2020

TL; Д.Р .: Я хотел бы знать, не слишком полагаясь на базовый механизм контейнеризации, какой процесс порождал контейнер при запуске нового контейнера

С недавними инструментами контейнеризации основной процесс контейнера обычно не потомок процесса, который его породил. Это потому, что контейнеры запускаются демонизировано. Например, с docker, если docker запускает отдельный контейнер, его предками будут containerd-shim, containerd и systemd/init(1), но не оболочка, которая его породила!

* 1011 Есть ли способ на уровне ядра, когда создается контейнер, чтобы сказать, кто является логическим родителем, то есть процессом, который его создал? Я хотел бы сделать что-то вроде следующего псевдокода:
int on_container_spawn(int container_rootpid) {
    int logical_parent = find_logical_parent(container_pid, ...) 
    pr_debug("logical parent of %d is %d", logical_parent, container_rootpid);
    return  logical_parent;
}

Хотя я еще не пробовал, похоже, что для контейнеров на основе OCI ловушка prestart должна быть хорошим местом для поиска но это работает только для контейнеров на основе OCI и, например, не будет работать для контейнеров LX C.

Есть ли способ получить эту информацию, не слишком полагаясь на основную технологию? Если это невозможно, знаете ли вы, как я могу сделать это для конкретной технологии c?


Примечание. не имеет значения для моего варианта использования.

...