自分自身をバックグラウンドに置くコマンドを実行したい(または、それが可能な場合は、コマンドをフォアグラウンドモードで実行して自分自身でバックグラウンドで実行する)。そして、バックグラウンドプロセスどのように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'を' Start() 'すると、Goアプリケーションと同時に実行される別々の子プロセス(適切な' Process.Pid'を持つ)が既に存在します。たぶんsshフラグから '-f'を削除するだけでいいですか? –
私のゴープロセスが終了してからプロセスを実行し続ける必要があります。私は、将来、バックグラウンドを持つsshプロセスをkillする必要があります。そのためには、pidを保存しておく必要があります。 – sbs
ええと、実際にあなたが正しいです、もし私がそれを待っていなくてもプロセスは続行し、ただ終了します。 – sbs