ProcessBuilder和Process.waitFor(),它等了多久?

新手上路,请多包涵

我正在使用 ProcessBuilder 类和 Process 类从 java 执行一个 .exe 文件。解释我在做什么:

  builder = new ProcessBuilder(commands);
 builder.redirectErrorStream(true);
 Process process = builder.start();
 process.waitFor();

我只是想知道,“waitFor()”要等多久?是等到我的 .exe 被执行,还是等到它的执行完成?

我的 .exe 是一个已编译的 AutoIt 脚本。这意味着,可能会有像鼠标移动这样的交互,这需要一些时间。所以我需要知道我的 Java 代码在调用 .exe 之后是否继续执行,或者它是否真的在等待它。

我想要实现的是两个脚本的轮换执行,但恐怕我的 Java 代码正在执行第二个脚本,而第一个脚本仍在运行。有没有人解决这个问题?我很高兴有任何想法。

原文由 KJaeg 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

您当前的执行线程将在 process.waitFor() 上被阻塞,直到进程终止(即执行完成)。来源 在这里

另请注意,如果进程已经终止:waitFor() 将不会被阻止。我不知道你在问题中输入的代码是否正是你运行的……但你必须小心并为你的脚本的每次执行重新创建一个新的 Process 实例(即不仅仅是多次调用 start同样的过程:第一次执行后就不行了)

原文由 ben75 发布,翻译遵循 CC BY-SA 3.0 许可协议

此外,如果“命令”中有输出。您应该通过 stream(process.getErrorStream())process.getInputStream()) 读取标准输出和标准错误输出。如果没有并且输出或错误输出已满,则 waitfor() 将被挂起。

原文由 Dorleeze 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题