Linux cgroup:将进程从一个 cgroup 移动到另一个 cgroup

Linux cgroup:将进程从一个 cgroup 移动到另一个 cgroup

前言:我对 systemd 和单元文件的概念不是 100% 熟悉,但我做了一些阅读。

上下文:我想将进程从一个 cgroup 树移动到另一个,在运行 systemd 的发行版上(非 systemd 的,比如 upstart)。更具体地说,cgroup 树如下所示。

基本上,相对于 my_root,层次结构看起来像这样

                     my_root
                        |
                  ______ ___________
                  |                |
                  d11             d12
              (P lives here)       |
                              ___________
                              |          |
                             d21        d22

然后 P 移动到 d21 或

                     my_root
                        |
                  ______ ___________
                  |                |
                  d11             d12
                                   |
                              ___________
                              |          |
                             d21        d22
                     (P lives here now) 

为了完整起见,我们可以说 my_root = /sys/fs/cgroups/cpu,cpuacct/my_root

让我们讨论非 systemd 存储桶:如果我在未运行 systemd 的发行版上运行,我可以将 pid 回显P1cgroups.procsof中d21,然后它会将我的进程移动到该 cgroup。

现在讨论systemd用例,这是我不确定的,假设我做了与上面相同的事情,可能会发生两件事。

  • 该过程移动到那里并停留在那里。
  • 该过程最初移动到那里,但一段时间后它会返回或转到该特定控制器的根 cgroup。

我想避免后者。基本上,我在想,当我为我的应用程序指定单元文件时,我想获得启动应用程序的 cgroup 的所有权,例如,应用程序获得my_rootcgroup 的所有权,这样 systemd 就不会干扰进程移动。

现在来讨论这个多部分的问题。

  • systemd 是否真的会将该进程从我将其移入的 cgroup 中移出?
  • 如果是,那么我需要做什么才能获得单元文件中 cgroup 的所有权。我正在寻找一些单元文件的具体示例。

资源:https://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/

相关内容