Chcę uruchomić komendę, która umieszcza się w tle (lub jeśli to sprawia, że rzeczy są bardziej możliwe, uruchamiać polecenie w trybie pierwszoplanowym i samodzielnie je), i uzyskać pid z proces w tle. Jak mam to zrobić w Go? Próbowałem:golang exec proces w tle i pobierz jego 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()
zwraca Ten ~ natychmiast, pozostawia ssh działa w tle, ale PID nie jest PID procesu docierania ssh (przypuszczalnie jego pid procesu rodzic ssh przed rozwidloną i w tle; sama) .
Jak zrobić to poprawnie?
Co masz na myśli przez "tło"? Kiedy 'Start()' twój 'Cmd' masz już oddzielny proces potomny (z właściwym' Process.Pid') działający równolegle do twojej aplikacji Go. Być może wystarczy usunąć '-f' z flag ssh? –
Potrzebuję proces, aby kontynuować działanie po zakończeniu procesu go. Następnie muszę mieć możliwość zabicia w tle procesu ssh, dla którego będę musiał przechowywać jego pid. – sbs
Hmm, faktycznie masz rację, proces trwa, jeśli nie czekam na to i po prostu zakończ. – sbs