前言:我对 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 回显P1
到cgroups.procs
of中d21
,然后它会将我的进程移动到该 cgroup。
现在讨论systemd
用例,这是我不确定的,假设我做了与上面相同的事情,可能会发生两件事。
- 该过程移动到那里并停留在那里。
- 该过程最初移动到那里,但一段时间后它会返回或转到该特定控制器的根 cgroup。
我想避免后者。基本上,我在想,当我为我的应用程序指定单元文件时,我想获得启动应用程序的 cgroup 的所有权,例如,应用程序获得my_root
cgroup 的所有权,这样 systemd 就不会干扰进程移动。
现在来讨论这个多部分的问题。
- systemd 是否真的会将该进程从我将其移入的 cgroup 中移出?
- 如果是,那么我需要做什么才能获得单元文件中 cgroup 的所有权。我正在寻找一些单元文件的具体示例。
资源:https://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/