5

によると:

unix/linux「tail-f」のJavaIO実装

Javaの「tail-f」ラッパー

可能だと思いますが、次のような問題があります。

String TailCommand = "tail -f /path/PATH.txt| grep (...)";
Runtime r = Runtime.getRuntime();
Process p = r.exec(TailCommand);

//handle buffer

while (running) {
    // handle output
}

プロセスpは終了します。「top」や「tail-f」とは異なり、定期的に更新されないコマンドで正常に機能します。

私は何かを逃したのだろうか、いくつかのバッファ制限などがありますか?Eclipseを使用していますが、プロセスの動作に影響を与えることはないと思います。

実際、私が見逃した問題を解決する別の簡単な方法があるかもしれません。「tail-f」を使用しているのは、絶えず追加されているかなり太い(一部のGB)ログを分析する必要があり、それを開いてファイル全体を読み取るつもりがないためです。追加行を制御するだけで済みます。しかし、適切なテール実装が見つかりませんでした

前もって感謝します。

4

1 に答える 1

2

パイプされたコマンドを Java 内から実行することはできません。

パイプ出力が必要な場合は、次のように「/bin/sh」を実行します。

String tailCommand = "/bin/sh -c 'tail -f /path/PATH.txt| grep (...)'";

また、Java プログラムは、バッファがオーバーフローしないように、プロセスの出力を十分に速く消費する必要があります。

Java からプロセスを実行しようとするときの一般的な落とし穴の説明については、この記事When Runtime.exec() will notをお読みください。

于 2013-02-11T22:49:12.357 に答える