Runtime Exec意外停止

时间:2011-11-21 01:02:47

标签: java c runtime runtime.exec

我在C中有一个可执行程序,可以为文件生成大量输出。 当我用Runtime调用这个程序时,像这样:

Runtime r = Runtime.getRuntime();
Process p = null;

p = r.exec("./my_program -in input.file -out output.file", null, new File(System.getProperty("java.io.tmpdir")));

当程序产生低输出时,一切都还可以,但是当我用大输入调用“* my_program *”时,它会产生大量的输出到output.file,但在这种情况下我的程序在Java中冻结和什么都没发生......

我在终端中使用大量输入测试“* my_program *”,一切正常,但是当我使用Runtime.exec用Java调用程序时,Java程序就会冻结。

- 提前致谢

1 个答案:

答案 0 :(得分:1)

如果您还没有,请确保您正在阅读流程的.getOutputStream().getErrorStream()。查看您的代码段,您似乎只是在执行.exec(...)(并且可能正在等待.waitFor()未显示的呼叫完成?)。

Per http://download.oracle.com/javase/6/docs/api/java/lang/Process.html(强调补充):

  

父进程使用这些流向输入提供输入并获取输出   从子进程。因为一些本机平台只提供   标准输入和输出流的缓冲区大小有限,失败   及时写入输入流或读取输出流   subprocess 可能导致子进程阻塞,甚至死锁