Heim > Backend-Entwicklung > Golang > Wie kann man lang laufende Prozesse in Golang ausführen und verhindern, dass sie zu Zombies werden?

Wie kann man lang laufende Prozesse in Golang ausführen und verhindern, dass sie zu Zombies werden?

Patricia Arquette
Freigeben: 2024-10-27 21:16:01
Original
509 Leute haben es durchsucht

How to Execute Long-Running Processes in Golang and Prevent Them From Becoming Zombies?

Befehl in Golang ausführen und vom Prozess trennen

Dieses Problem tritt auf, wenn Sie einen lang laufenden Prozess in Golang ausführen müssen spezifische Anforderungen wie:

  • Prozess-Standardausgabe in eine Datei umleiten
  • Kontrolle des Prozessbenutzers
  • Sicherstellen, dass der Prozess auch nach Beendigung des übergeordneten Programms weiter ausgeführt wird
  • Verhindern, dass der Prozess zu einem Zombie wird, wenn er abstürzt
  • Ermitteln der PID des laufenden Prozesses

Ihr Lösungsversuch mit Cmd.Start() und Cmd.Wait() erfüllt die meisten dieser Anforderungen, außer dass der zugrunde liegende Prozess nicht abstürzt, wenn Sie SIGTERM/SIGKILL an Ihr Programm senden.

Lösung

Anstatt zu versuchen, das Rad neu zu erfinden, Erwägen Sie die Verwendung einer der folgenden Bibliotheken:

  • https://github.com/krallin/tini
  • https://busybox.net/
  • https: //software.clapper.org/daemonize/
  • https://wiki.gentoo.org/wiki/OpenRC
  • https://www.freedesktop.org/wiki/Software/systemd /

Go-reap-Bibliothek

Eine empfohlene Lösung ist die Verwendung der https://github.com/hashicorp/go-reap-Bibliothek.

Hinweise

  • Ihre Annahme, einen Prozess von seinem übergeordneten Prozess zu trennen, ist falsch. Unter Linux hat jeder Prozess einen übergeordneten Prozess, und Sie können ihn nach der Erstellung nicht ändern.
  • Die Anweisung „Ich möchte ihn als Daemon ausführen“ ist unklar. Daemon-Prozesse in Linux haben eine übergeordnete PID und befolgen die Parent-to-Child-Regel.
  • Das Problem mit dem Absturz des zugrunde liegenden Prozesses, wenn SIGTERM/SIGKILL an Ihr Programm gesendet wird, kann mit der Go-Reap-Bibliothek nicht reproduziert werden .

Haftungsausschluss

Die bereitgestellte Lösung konzentriert sich auf das Problem, zu verhindern, dass der Unterprozess zu einem Zombie wird. Für eine Komplettlösung, die alle Anforderungen erfüllt, kann eine Kombination verschiedener Ansätze erforderlich sein.

Das obige ist der detaillierte Inhalt vonWie kann man lang laufende Prozesse in Golang ausführen und verhindern, dass sie zu Zombies werden?. 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