java - process.waitFor() 永远不会返回

标签 java runtime.exec

Process process = Runtime.getRuntime().exec("tasklist");
BufferedReader reader = 
    new BufferedReader(new InputStreamReader(process.getInputStream()));
process.waitFor();

最佳答案

waitFor() 没有返回的原因有很多。

但通常归结为执行的命令没有退出。

同样,这可能有很多原因。

一个常见的原因是该过程产生了一些输出,而您没有从适当的流中读取。这意味着一旦缓冲区已满,该进程就会被阻止并等待您的进程继续读取。您的进程反过来等待另一个进程完成(它不会因为它等待您的进程,...)。这是典型的死锁情况。

您需要不断地从进程输入流中读取,以确保它不会阻塞。

有一篇很好的文章解释了 Runtime.exec() 的所有缺陷并展示了绕过它们的方法,称为 "When Runtime.exec() won't" (是的,这篇文章是 2000 年的,但内容仍然适用!)

关于java - process.waitFor() 永远不会返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5483830/

相关文章:

Java 运行时命令行进程

java - (Java) JLabel 的 setBounds 问题

java - 如何编写在它们之间使用相互 ssl 身份验证的 java 客户端和服务器应用程序?

java - 如何从 Java 应用程序运行批处理文件?

Java : Does Runtime. getRuntime().exec() 默认等待?

java - 执行包含 Java 多行的 ".bat"文件

java - Tomcat v7.0 服务器启动失败

Java运行时执行

c# - 旋转表迭代

java - Exec 在错误的计算机上运行程序?