Linux-Kontrollgruppe: Verschieben eines Prozesses von einer Kontrollgruppe in eine andere

Linux-Kontrollgruppe: Verschieben eines Prozesses von einer Kontrollgruppe in eine andere

Vorwort: Ich bin nicht hundertprozentig vertraut mit systemd und den Konzepten der Unit-Dateien, habe mich aber einiges eingelesen.

Kontext: Ich möchte einen Prozess von einem Cgroup-Baum in einen anderen verschieben, und zwar auf einer Distribution mit systemd und (nicht systemd, sagen wir mal upstart). Genauer gesagt, der Cgroup-Baum sieht so aus.

Grundsätzlich sieht die Hierarchie relativ zu my_root folgendermaßen aus

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

dann bewegt sich P unter d21 oder

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

Der Vollständigkeit halber sagen wir my_root = /sys/fs/cgroups/cpu,cpuacct/my_root

Lassen Sie uns über Nicht-Systemd-Buckets sprechen: Wenn ich eine Distribution verwende, auf der kein Systemd läuft, kann ich einfach die PID von P1in cgroups.procs„von“ echoen d21und dann wird mein Prozess in diese Cgroup verschoben.

Und nun zum systemdAnwendungsfall, und da bin ich mir nicht sicher. Nehmen wir an, ich mache dasselbe wie oben. Dann können zwei Dinge passieren.

  • Der Prozess bewegt sich dorthin und bleibt dort.
  • Der Prozess wird zunächst dorthin verschoben, geht aber nach einiger Zeit entweder zurück oder zur Root-Kontrollgruppe für den jeweiligen Controller.

Letzteres möchte ich vermeiden. Grundsätzlich denke ich, dass ich, wenn ich die Unit-Datei für meine Anwendung angebe, den Besitz der Kontrollgruppe übernehmen möchte, in der die Anwendung gestartet wird. Beispielsweise übernimmt die Anwendung den Besitz der my_rootKontrollgruppe, damit systemd die Prozessverschiebung nicht stört.

Nun zur mehrteiligen Frage.

  • Wird systemd den Prozess wirklich aus der Kontrollgruppe entfernen, in die ich ihn verschoben habe?
  • Wenn ja, was muss ich tun, um den Besitz der Cgroup in der Unit-Datei zu übernehmen? Ich suche nach einigen spezifischen Beispielen für Unit-Dateien.

Ressource:https://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/

verwandte Informationen