Linux cgroup:將進程從一個 cgroup 移到另一個 cgroup

Linux cgroup:將進程從一個 cgroup 移到另一個 cgroup

前言:我並不是 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 回顯P1cgroups.procsof中d21,然後它將我的進程移至該 cgroup。

現在是systemd用例,這是我不確定的,假設我做了與上面相同的事情,可能會發生兩件事。

  • 該過程移動到那裡並停留在那裡。
  • 該進程最初會移動到那裡,但一段時間後它會返回或轉到該特定控制器的根 cgroup。

我想避免後者。基本上我在想,當我為應用程式指定單元檔案時,我想獲得應用程式啟動時所在的 cgroup 的所有權,例如應用程式獲得my_rootcgroup 的所有權,以便 systemd 不會幹擾進程移動。

現在討論多部分問題。

  • systemd 真的會將進程從我移走的 cgroup 移走嗎?
  • 如果是,那麼我需要做什麼才能獲得單元檔案中 cgroup 的所有權。我正在尋找單元文件的一些具體示例。

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

相關內容