Heim > Backend-Entwicklung > Golang > Wie kann sichergestellt werden, dass untergeordnete Prozesse die Beendigung des übergeordneten Prozesses in systemd überleben?

Wie kann sichergestellt werden, dass untergeordnete Prozesse die Beendigung des übergeordneten Prozesses in systemd überleben?

Susan Sarandon
Freigeben: 2024-12-25 08:24:10
Original
624 Leute haben es durchsucht

How to Ensure Child Processes Survive Parent Process Termination in systemd?

Trennen von untergeordneten Prozessen in Systemd

Beim Ausführen eines Programms, das lang laufende untergeordnete Prozesse erzeugt, ist es wichtig sicherzustellen, dass die untergeordneten Prozesse auch nach dem Hauptprozess aktiv bleiben Der Prozess wird neu gestartet oder beendet. Über die Befehlszeile kann dies erreicht werden, indem das Setsid-Flag des exec.Command-Objekts auf true gesetzt wird. Dadurch wird der untergeordnete Prozess von der Sitzung und der Prozessgruppe des übergeordneten Prozesses getrennt, sodass er weiterhin unabhängig ausgeführt werden kann.

Wenn Sie jedoch den Hauptprozess über systemd starten, kann die Standardeinstellung „KillMode“ in der Dienstkonfigurationsdatei die Funktion beeinträchtigen Ablösungsprozess. Standardmäßig ist der KillMode von systemd auf „control-group“ eingestellt, was bedeutet, dass alle Prozesse innerhalb der Kontrollgruppe der Einheit beendet werden, wenn der Hauptprozess stoppt.

Um dieses Problem zu beheben und den untergeordneten Prozessen zu ermöglichen, den Hauptprozess zu überleben Bei Beendigung muss die KillMode-Einstellung in der Systemd-Dienstdatei geändert werden.

Systemd-Dienstdatei ändern

Um die KillMode-Einstellung zu ändern, bearbeiten Sie die systemd-Dienstdatei unter /etc/systemd/system/exectest.service und fügen Sie die folgende Zeile im Abschnitt [Service] hinzu:

KillMode=process
Nach dem Login kopieren

Durch das Festlegen von KillMode auf „Prozess“ wird sichergestellt, dass nur der Hauptprozess selbst beendet wird, wenn Das Gerät wird gestoppt. Dadurch wird sichergestellt, dass die untergeordneten Prozesse unberührt bleiben und unabhängig weiterlaufen.

Nachdem Sie die Änderung vorgenommen haben, speichern Sie die Datei und starten Sie den systemd-Dienst mit den folgenden Befehlen neu:

sudo systemctl daemon-reload
sudo systemctl restart exectest
Nach dem Login kopieren

Überleben des untergeordneten Prozesses überprüfen

Um zu überprüfen, ob die untergeordneten Prozesse die Beendigung des übergeordneten Prozesses überleben, führen Sie die folgenden Schritte aus:

  1. Überprüfen Sie Ausführen von Prozessen mit ps -ef | grep exectest: Dies sollte den Hauptprozess (exectest) anzeigen, der unter dem systemd-Benutzer ausgeführt wird, und den untergeordneten Prozess (exectest child), der noch aktiv ist.
  2. Übergeordneten Prozess beenden: Senden Sie ein Signal an den Hauptprozess (z. B. sudo kill -INT ), um ihn zu beenden.
  3. Überleben des untergeordneten Prozesses überprüfen: Führen Sie ps -ef | erneut aus grep exectest, um zu überprüfen, ob der untergeordnete Prozess noch läuft. Bleibt der untergeordnete Prozess aktiv, war die Änderung der Servicedatei erfolgreich.

Das obige ist der detaillierte Inhalt vonWie kann sichergestellt werden, dass untergeordnete Prozesse die Beendigung des übergeordneten Prozesses in systemd überleben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage