C 查找容器的逻辑父pid

C 查找容器的逻辑父pid,c,linux,docker,linux-kernel,containers,C,Linux,Docker,Linux Kernel,Containers,TL;DR:我想知道,在不太依赖底层容器化引擎的情况下,当新容器启动时,哪个进程生成了一个容器 使用最新的容器化工具,容器的主进程通常不是产生它的进程的后代。这是因为容器是后台运行的。例如,对于docker,如果docker运行一个分离的容器,它的祖先将是containerd shim,containerd和systemd/init(1),但不是产生它的shell 在创建容器时,是否有内核级的方法来判断哪个是逻辑父级,即创建它的进程?我想做一些类似于以下伪代码的事情: int on_contai

TL;DR:我想知道,在不太依赖底层容器化引擎的情况下,当新容器启动时,哪个进程生成了一个容器

使用最新的容器化工具,容器的主进程通常不是产生它的进程的后代。这是因为容器是后台运行的。例如,对于docker,如果docker运行一个分离的容器,它的祖先将是
containerd shim
containerd
systemd/init(1)
,但不是产生它的shell

在创建容器时,是否有内核级的方法来判断哪个是逻辑父级,即创建它的进程?我想做一些类似于以下伪代码的事情:

int on_container_spawn(int container_rootpid){
int logical\u parent=查找\u logical\u parent(容器\u pid,…)
pr_debug(“%d的逻辑父级是%d”,逻辑父级,容器根PID);
返回逻辑_父级;
}
虽然我还没有尝试过,但是对于基于OCI的容器来说,
prestart
钩子一定是一个很好的选择,但是它只适用于基于OCI的容器,例如,对于LXC容器就不起作用

有没有一种方法可以在不太依赖底层技术的情况下获取这些信息?如果不可行,你知道我如何为特定的技术做到这一点吗


注意:我非常清楚生成容器的过程可以在容器之前终止,但这与我的用例无关