Process 如何监控容器中的流程?

Process 如何监控容器中的流程?,process,linux-kernel,cgroups,linux-containers,Process,Linux Kernel,Cgroups,Linux Containers,我目前正在研究LXC容器API。我试图弄清楚如何让操作系统知道当前运行的进程属于哪个容器。通过这种方式,操作系统可以根据容器为进程分配资源。我假设您的查询给定了一个PID,如何找到运行此进程的容器 我将根据最近对Linux容器的阅读来回答这个问题。每个容器都可以配置为从其自己的用户和组id映射开始 发件人: lxc.id\u图 必须提供四个值。首先是一个字符“u”或“g”,用于指定是否映射用户ID或组ID。其次是 容器的用户名称空间中看到的第一个用户ID。下一个 是在主机上看到的用户ID。最后,

我目前正在研究LXC容器API。我试图弄清楚如何让操作系统知道当前运行的进程属于哪个容器。通过这种方式,操作系统可以根据容器为进程分配资源。

我假设您的查询给定了一个PID,如何找到运行此进程的容器

我将根据最近对Linux容器的阅读来回答这个问题。每个容器都可以配置为从其自己的用户和组id映射开始

发件人:

lxc.id\u图 必须提供四个值。首先是一个字符“u”或“g”,用于指定是否映射用户ID或组ID。其次是 容器的用户名称空间中看到的第一个用户ID。下一个 是在主机上看到的用户ID。最后,一个范围指示 要映射的连续ID数

因此,您可以在配置文件Ex:~/.config/lxc/default.conf中添加如下内容:

lxc.id_map = u 0 100000 65536
lxc.id_map = g 0 100000 65536
以上基本上意味着0到65536之间的UID/GID映射为100000到1655356之间的数字。因此,容器上根为0的uid在主机上将被视为100000

例如,在容器内部,它看起来像这样:

root@unpriv_cont:/# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 02:18 ?        00:00:00 /sbin/init
root       157     1  0 02:18 ?        00:00:00 upstart-udev-bridge --daemon
ps -ef | grep 100000
100000    2204  2077  0 Dec12 ?        00:00:00 /sbin/init
100000    3170  2204  0 Dec12 ?        00:00:00 upstart-udev-bridge --daemon
100000    1762  2204  0 Dec12 ?        00:00:00 /lib/systemd/systemd-udevd --daemon
但在主机上,相同的进程将如下所示:

root@unpriv_cont:/# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 02:18 ?        00:00:00 /sbin/init
root       157     1  0 02:18 ?        00:00:00 upstart-udev-bridge --daemon
ps -ef | grep 100000
100000    2204  2077  0 Dec12 ?        00:00:00 /sbin/init
100000    3170  2204  0 Dec12 ?        00:00:00 upstart-udev-bridge --daemon
100000    1762  2204  0 Dec12 ?        00:00:00 /lib/systemd/systemd-udevd --daemon

因此,您可以通过查找进程的UID并将其与该容器的配置中定义的映射相关联来找到该进程的容器。

非常感谢。但我不是在寻找命令行解决方案。我需要一种让操作系统识别进程所属容器的方法。