运行时执行程序意外停止

发布于 2024-12-17 15:14:36 字数 461 浏览 0 评论 0原文

我有一个用 C 语言编写的小可执行程序,它可以向文件生成大量输出。 当我使用运行时调用该程序时,如下所示:

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

-- 提前致谢

I have a little executable program in C that produce a lot of output to a file.
When I call this program with Runtime, like this:

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")));

When the program produce low output everything is ok, but when I call "*my_program*" with a large input it will produce a large quantity of output to the output.file, but in this case my program in Java freeze and nothing happen...

I test "*my_program*" in terminal with a lot of large inputs and everything is ok, but when I call the program in Java with Runtime.exec, the Java program freeze.

--
Thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

谁的年少不轻狂 2024-12-24 15:14:36

确保您正在读取 Process 的 .getOutputStream().getErrorStream()(如果尚未读取)。查看您的代码片段,您似乎只是在执行 .exec(...) (并且可能正在等待它完成,并且未显示对 .waitFor()< 的调用) /代码>?)。

根据 http://download.oracle.com/javase/ 6/docs/api/java/lang/Process.html(强调):

父进程使用这些流来提供输入并获取输出
来自子流程。因为有些原生平台只提供
标准输入和输出流的缓冲区大小有限,无法
及时写入输入流或读取输出流
子进程可能会导致子进程阻塞,甚至死锁

Make sure you're reading from the Process's .getOutputStream() and .getErrorStream() if you aren't already. Looking at your code snippet, it appears that you're just executing .exec(...) (and maybe waiting for it to complete with a call not shown to .waitFor()?).

Per http://download.oracle.com/javase/6/docs/api/java/lang/Process.html (emphasis added):

The parent process uses these streams to feed input to and get output
from the subprocess. Because some native platforms only provide
limited buffer size for standard input and output streams, failure to
promptly write the input stream or read the output stream of the
subprocess may cause the subprocess to block, and even deadlock.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文