代码之家  ›  专栏  ›  技术社区  ›  Manuel Selva

为什么process.waitfor()永远不会返回?

  •  2
  • Manuel Selva  · 技术社区  · 14 年前

    我通过Java代码启动一个Windows进程(用C++编写,但我没有源码):

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

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

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

    所以我的问题是下面的一个:这个解决方案是“启动和等待具有输出的外部进程的Java标准”,或者这意味着在本地过程中有什么问题吗?如果存在这样一个问题,C++编程中的“错误”可以是起源的问题吗?

    1 回复  |  直到 14 年前
        1
  •  16
  •   dty    14 年前

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

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

    我建议你读 this article (全部4页)并执行建议。