Maison >développement back-end >Golang >Comment exécuter un processus de longue durée dans Go et le détacher du processus parent ?
Je dois exécuter un processus de longue durée dans Go, répondant aux exigences exigences suivantes :
J'exécute mon programme avec les autorisations root et j'ai a tenté une solution en utilisant exec.Command() et syscall.SysProcAttr, mais elle échoue lorsque j'envoie SIGTERM/SIGKILL à mon programme, provoquant le crash du processus sous-jacent. Je souhaite exécuter le processus en tant que démon, distinct du contrôle de mon programme.
L'utilisation d'une bibliothèque externe, telle que github.com/hashicorp/go-reap, est fortement recommandée car cela résout efficacement le problème. Cependant, si vous préférez une implémentation personnalisée, l'approche suivante peut être envisagée :
Il est important de reconnaître qu'il est impossible de séparer complètement le processus parent et enfant en termes d'héritage de processus. Tous les processus doivent avoir un parent, et si le parent décède, l'enfant deviendra orphelin et sera adopté par le PID 1 (init). En d'autres termes, l'enfant ne peut pas avoir un parent différent de celui du processus initial qui l'a démarré.
Pour garantir que le processus continue de s'exécuter après la sortie du parent, envisagez d'utiliser un gestionnaire de processus dédié comme systemd ou docker, qui peut gérer processus orphelins et assurer leur exécution continue. D'autres solutions potentielles incluent l'écriture d'un démon personnalisé ou l'utilisation d'une bibliothèque comme go-daemon pour gérer le cycle de vie du processus indépendamment du programme parent.
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!