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程序就会冻结。

– 提前致谢

如果您还没有,请确保您正在读取Process的.getOutputStream().getErrorStream() 。 看看你的代码片段,看起来你只是在执行.exec(...) (并且可能正在等待它完成一个未显示给.waitFor()的调用?)。

根据http://download.oracle.com/javase/6/docs/api/java/lang/Process.html (重点补充):

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