Heim > Artikel > Backend-Entwicklung > So trennen Sie einen untergeordneten Prozess in Go: Warum ist os.SysProcAttr das falsche Tool für den Job?
Forking eines Prozesses: Umgang mit Ablösungs- und Fehlermeldungen
In Go können Sie mit Process Forking einen untergeordneten Prozess erstellen, der unabhängig von ihm ausgeführt wird Elternteil. Dies kann aus verschiedenen Gründen nützlich sein, beispielsweise für die Hintergrundverarbeitung oder die Erstellung von Diensten.
Ihr bereitgestellter Code erstellt einen untergeordneten Prozess mit os.StartProcess, hat jedoch Schwierigkeiten, den untergeordneten Prozess von der Befehlszeile zu trennen und die Verbindung aufrechtzuerhalten. Um dieses Problem zu beheben, versuchen Sie, das untergeordnete Fenster mit procAttr.Sys.HideWindow auszublenden, stoßen jedoch auf einen Fehler im Zusammenhang mit einem Speicherzeiger.
Der aufgetretene Fehler ist auf das Festlegen des Sys-Felds der ProcAttr-Struktur zurückzuführen falsch. In Go erwartet os.StartProcess, dass das Sys-Feld den Typ hat, der dem zugrunde liegenden Betriebssystem entspricht. Für Windows ist der richtige Typ syscall.SysProcAttr.
Um den Fehler zu beheben, ändern Sie den Code so, dass er syscall.SysProcAttr anstelle von os.SysProcAttr verwendet:
package main import ( "fmt" "os" "os/exec" "syscall" ) func start() { var procAttr syscall.SysProcAttr procAttr.Files = []*os.File{nil, nil, nil} cmd := exec.Command("c:\Path\to\program.exe") cmd.SysProcAttr = &procAttr if err := cmd.Start(); err != nil { fmt.Printf("%v", err) } } func main() { start() }
Durch die Verwendung eines dedizierten Systemaufrufs Wenn Sie für die betriebssystemspezifischen Einstellungen einen Typ eingeben, können Sie den Fehler vermeiden und den untergeordneten Prozess erfolgreich von der Befehlszeile trennen.
Das obige ist der detaillierte Inhalt vonSo trennen Sie einen untergeordneten Prozess in Go: Warum ist os.SysProcAttr das falsche Tool für den Job?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!