我想運行一個將自己置於後臺的命令(或者如果它使事情更有可能,自己在前臺模式下運行命令並將其後臺運行),並獲取pid後臺進程。我如何在Go中執行此操作?我想:golang exec後臺進程並獲取其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()
這將返回〜瞬間,留下SSH在後臺運行,但PID是不是運行SSH進程的PID(大概是它的父SSH進程的PID之前分叉和中背景本身) 。
如何正確執行此操作?
你是什麼意思的「背景」?當你開始()你的'Cmd'時,你已經有一個單獨的子進程(有適當的'Process.Pid')同時運行到你的Go應用程序。也許你只需要從ssh標誌中刪除'-f'? –
我需要該進程在我的進程退出後繼續運行。然後,我需要能夠在未來殺死後端的ssh進程,爲此我需要存儲它的pid。 – sbs
嗯,實際上你是對的,如果我不等它並且退出,這個過程就會繼續。 – sbs