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

2022-09-03 01:48:51

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

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

我只是想知道,“waitFor()”等待了多长时间?是等到我的.exe执行,还是等到执行完成?

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

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


答案 1

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

另请注意,如果进程已经终止:waitFor() 不会被阻止。我不知道你放在问题中的代码是否正是你运行的......但是您必须小心,并为脚本的每次执行重新创建一个新的 Process 实例(即,不要只是在同一进程上多次调用 start:它在首次执行后不起作用)


答案 2

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


推荐