0
私のgoプログラムでは、特定のプロセスを継続的に監視するためにtop
を実行する必要があります。しかし、top
は、各行が記録された時のタイムスタンプを私に与えません。私は出力に私の自己をそれを付加考えている:Go:トップからの出力にコンテンツを追加する
top := exec.Command("top", "-p", pid)
r, w := os.Pipe()
top.Stdout = w
top.Start()
この方法で私はパイプの一端にr
からの出力を読み取ることができます。 top.Stdout
から新しい行があるときに、現在のタイムスタンプを取得して出力に追加するアクションをどのように起動できますか?私はそれがコールバックやPythonのジェネレータのようにすべきだと思いますが、私はGoでそれを行う方法がわかりません。線に沿って
ゴルーチン内の 'for'ループは永遠に走っているようですね?もし私が 'top.Process.Signal(os.Kill)'を持っていたら、それに応じてそのゴルーチンを止める方法は?ありがとう。 –
@JFreebird 'sc.Scan()'は、リーダが 'io.EOF'を返して終了するので、falseを返します。 – OneOfOne