【问题标题】:Why does Process.waitFor() never return?为什么 Process.waitFor() 永远不会返回?
【发布时间】:2010-10-19 11:42:36
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: java c++ process


    【解决方案1】:

    这是操作系统的事情。子进程正在写入标准输出,并且正在缓冲等待您的 Java 进程读取它。当您不读取它时,缓冲区最终会填满,子进程会阻止写入 stdout 以等待缓冲区空间。

    无论您使用哪种语言,您都必须处理子进程的标准输出(和标准错误)。

    我建议您阅读this article(全部 4 页)并在那里实施建议。

    【讨论】:

    • 谢谢。答案在 Javadoc 中,但在类级别,我只阅读了 exec 和 waitFor 方法文档。下次我也会阅读课堂文档;-)
    • 很遗憾,这篇文章已经不存在了。至少不在发布的网址下。
    猜你喜欢
    • 2011-07-25
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    相关资源
    最近更新 更多