2010-10-19 164 views
2

我推出一个Windows过程从Java代码以下列方式(在C++写的,但我没有源):为什么Process.waitFor()永远不会返回?

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

我的问题是,WAITFOR()方法永远不会结束。因此我试图在一个简单的shell中启动这个进程,并且它在shell中有很多打印(我想是标准输出)。

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

所以我的问题是下面的一个:是该解决方案的“Java标准推出,并等待其输出的外部进程”或者它意味着有一个问题的地方在本机进程?如果存在这样的问题,那么C++编程“错误”可能会成为问题的根源?

回答

16

这是一个操作系统的东西。子进程正在写入stdout,并且正在缓存,等待Java进程读取它。当你不读它时,缓冲区最终会填满,子进程会阻塞写入标准输出等待缓冲区空间。

你将不得不处理子进程的stdout(和stderr),无论你使用哪种语言。

我建议你阅读this article(共4页的话)并实现那里的建议。

+0

谢谢。答案是在Javadoc中,但是在类级别上,我只能读取exec和waitFor方法doc。下次我还会读班级文件;-) – 2010-10-19 12:10:02

相关问题