Heim >Backend-Entwicklung >Golang >Wie kann ich einen Go-Prozess mithilfe von „StartProcess()' von seinem übergeordneten Prozess in Windows trennen?

Wie kann ich einen Go-Prozess mithilfe von „StartProcess()' von seinem übergeordneten Prozess in Windows trennen?

Susan Sarandon
Susan SarandonOriginal
2024-11-03 19:45:29777Durchsuche

How can I detach a Go process from its parent in Windows using `StartProcess()`?

Entkoppeln eines Prozesses in Go

Um einen mit StartProcess() erstellten Prozess von seinem übergeordneten Prozess (in diesem Fall einer Befehlszeilenaufforderung) zu trennen, kann man Folgendes nutzen die Linker-Option -Hwindowsgui, die von der Go-Toolchain bereitgestellt wird.

Originalcode

Der bereitgestellte Go-Code versucht, mithilfe von StartProcess() einen entkoppelten Prozess mit der folgenden Konfiguration zu erstellen:

<code class="go">var procAttr os.ProcAttr 
procAttr.Files = []*os.File{nil, nil, nil}</code>

Während das Hinzufügen von procAttr.Sys.HideWindow = true darauf abzielt, das mit dem Prozess verknüpfte Fenster auszublenden, führt es zu dem Fehler „Panik“ aufgrund eines falschen Speicherzeigers.

Lösung

Die Die richtige Lösung besteht darin, beim Kompilieren des Go-Programms die Linkeroption -Hwindowsgui zu verwenden. Diese Option deaktiviert die Erstellung eines Konsolenfensters für den Prozess bei der Ausführung:

go tool 8l -o output.exe -Hwindowsgui input.8

Durch Aufrufen der Linkeroption -Hwindowsgui wird der Prozess ohne Konsolenfenster erstellt, wodurch er effektiv von der Eingabeaufforderung entkoppelt wird. Dadurch kann der Prozess unabhängig vom übergeordneten Prozess im Hintergrund ausgeführt werden.

Das obige ist der detaillierte Inhalt vonWie kann ich einen Go-Prozess mithilfe von „StartProcess()' von seinem übergeordneten Prozess in Windows trennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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