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 ?

Comment détacher un processus enfant dans Go : pourquoi os.SysProcAttr n'est pas le bon outil pour le travail ?

Linda Hamilton
Libérer: 2024-11-03 12:54:02
original
374 Les gens l'ont consulté

How to Detach a Child Process in Go: Why os.SysProcAttr is the Wrong Tool for the Job?

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()
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal