前言:我並不是 100% 熟悉 systemd 和單元文件的概念,但我已經閱讀了一些內容。
上下文:我想將進程從一個 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/