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

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

Process p1 = Runtime.getRuntime().exec(cmdAndParams); p1.waitFor(); 

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

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

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

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

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

我建议你阅读这篇文章 (全部4页)并在那里实施建议。