Maison >développement back-end >Golang >Comment détacher un processus enfant dans Go : pourquoi os.SysProcAttr n'est pas le bon outil pour le travail ?
Forking d'un processus : gestion du détachement et des messages d'erreur
Dans Go, le processus forking vous permet de créer un processus enfant qui s'exécute indépendamment de son mère. Cela peut être utile pour diverses raisons, telles que le traitement en arrière-plan ou la création de service.
Le code fourni crée un processus enfant à l'aide de os.StartProcess mais a du mal à détacher l'enfant de la ligne de commande, le gardant connecté. Pour résoudre ce problème, vous tentez de masquer la fenêtre de l'enfant à l'aide de procAttr.Sys.HideWindow, mais rencontrez une erreur liée à un pointeur mémoire.
L'erreur que vous avez rencontrée est due à la définition du champ Sys de la structure ProcAttr. incorrectement. Dans Go, os.StartProcess s'attend à ce que le champ Sys soit du type correspondant au système d'exploitation sous-jacent. Pour Windows, le type correct est syscall.SysProcAttr.
Pour résoudre l'erreur, modifiez le code pour utiliser syscall.SysProcAttr au lieu de os.SysProcAttr :
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() }
En utilisant un appel système dédié tapez les paramètres spécifiques au système d'exploitation, vous pouvez éviter l'erreur et réussir à détacher le processus enfant de la ligne de commande.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!