Je veux exécuter une commande qui se met en arrière-plan (ou si cela rend les choses plus possibles, exécutez la commande en mode premier plan et arrière-plan moi-même), et obtenir le pid de le processus d'arrière-plan. Comment est-ce que je fais ceci dans Go? J'ai essayé:golang exec processus d'arrière-plan et obtenir son pid
cmd := exec.Command("ssh", "-i", keyFile, "-o", "ExitOnForwardFailure yes", "-fqnNTL", fmt.Sprintf("%d:127.0.0.1:%d", port, port), fmt.Sprintf("%[email protected]%s", serverUser, serverIP))
cmd.Start()
pid := cmd.Process.Pid
cmd.Wait()
Cela renvoie ~ instantanément, les feuilles ssh en arrière-plan, mais pid est pas le pid du processus ssh actif (probablement son l'pid du processus ssh parent avant qu'il fourchue et backgrounded lui-même) .
Comment faire ceci correctement?
Qu'entendez-vous par "arrière-plan"? Quand vous 'Start()' votre 'Cmd' vous avez déjà un processus fils séparé (avec le bon' Process.Pid') en cours d'exécution simultanément à votre application Go. Peut-être que vous avez juste besoin de retirer '-f' des drapeaux ssh? –
J'ai besoin du processus pour continuer à fonctionner après la fermeture de mon processus. Je dois ensuite être en mesure de tuer le processus ssh en arrière-plan dans le futur, pour lequel j'ai besoin d'avoir stocké son pid. – sbs
Hmm, en fait vous avez raison, le processus continue si je ne l'attends pas et quitte juste. – sbs