首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当java启动终端执行时已失效的进程

当java启动终端执行时已失效的进程
EN

Stack Overflow用户
提问于 2016-07-15 10:36:21
回答 1查看 496关注 0票数 0

我试着用海怪对一些图像进行ocr。为此,我准备了一个控制台命令。它很慢,所以我把它和gnu并行结合起来。

代码语言:javascript
运行
复制
find temp/ -name '*.tif' -or -name '*.jpg' | parallel -j4 kraken -i {} {}.html binarize segment ocr -h

当我在终点站做这件事的时候,效果很好。当我在java(eclipse)中启动它时,执行会在30个映像之后停止。它不会终止。它留下了失效的过程。

代码语言:javascript
运行
复制
String command = "find temp/ -name '*.tif' -or -name '*.jpg' | parallel -j4 kraken -i {} {}.html binarize segment ocr -h";
Process p = Runtime.getRuntime().exec(new String[]{"/bin/bash","-c",command});
p.waitFor() == 0;

我尝试了几种配置(更多的内存(eclipse和解释),更少的线程),但是没有任何帮助。

是否有人想过避免已失效的进程,或者如何重新开始执行?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-15 10:40:05

几乎可以肯定的是,问题是您没有消耗进程的输出,导致它的输出缓冲区被填充,从而导致进程停滞。

尝试:

代码语言:javascript
运行
复制
String command = "find temp/ -name '*.tif' -or -name '*.jpg' | parallel -j4 kraken -i {} {}.html binarize segment ocr -h";
Process p = Runtime.getRuntime().exec(new String[]{"/bin/bash","-c",command});
InputStream is = p.getInputStream();
// is.skip(Long.MAX_VALUE);  Doesn't work
while (is.read() != -1) { } // consume all process output
p.waitFor();

一个完整的解决方案也将处理错误流。这可以通过启动一个单独的线程来完成,该线程从错误流读取/跳过输入。

(或者,您可以在bash命令脚本中将输出重定向到/dev/null )。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38393979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档