为什么Process.waitFor()永远不会返回?

Man*_*lva 2 c++ java process

我用以下方式从Java代码启动一个Windows进程(用C++编写但我没有源代码):

 Process p1 = Runtime.getRuntime().exec(cmdAndParams);
 p1.waitFor();
Run Code Online (Sandbox Code Playgroud)

我的问题是waitFor()方法永远不会结束.因此,我尝试在一个简单的shell中启动该过程,它正确地结束了shell中的许多打印(我想是标准输出).

因此,我决定创建并启动读取标准输出的线程,即使我现在不需要这些输出.这解决了这个问题.

所以我的问题是以下问题:这个解决方案是"启动和等待具有输出的外部进程的Java标准",还是意味着本机进程中存在某个问题?如果存在这样的问题,那么C++编程"错误"可能是问题的根源?

dty*_*dty 16

这是OS的事情.子进程正在写入stdout,并且正在缓冲,等待Java进程读取它.当你不读它时,缓冲区最终填满,子进程阻止写入stdout等待缓冲区空间.

您必须处理子进程'stdout(和stderr),无论您使用哪种语言.

我建议你阅读这篇文章(它的所有4页)并在那里实施建议.

  • 不幸的是,这篇文章已经不存在了。至少不在发布的网址下。 (2认同)