根据:
Java IO implementation of unix/linux "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)日志,这些日志不断附加并且不打算打开它并读取整个文件。我只需要控制附加行。但是我发现没有合适的尾部实现
提前致谢。
答案 0 :(得分:2)
您无法从java内部执行管道命令。
如果您想要管道输出,请执行'/ bin / sh',如下所示:
String tailCommand = "/bin/sh -c 'tail -f /path/PATH.txt| grep (...)'";
此外,您的java程序必须足够快地使用进程的输出,因此其缓冲区不会溢出。
您可能希望阅读本文When Runtime.exec() won't,以了解尝试从Java执行流程时常见的陷阱。