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

问题描述 投票:11回答:3

我从java中执行一个.exe文件,使用的是 流程建设者 阶级和 流程 类。解释一下我在做什么。

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

我只是想知道,"waitFor() "要等多久?它是在等待我的.exe被执行,还是在等待它的执行结束?

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

我想实现的是两个脚本的轮流执行,但我担心,我的Java代码在执行第二个脚本的同时,第一个脚本还在运行。我很高兴有任何想法。

java process console wait processbuilder
3个回答
10
投票

你的当前执行线程将被阻塞在 process.waitFor() 直到进程终止(即执行结束)。来源 此处

同时注意,如果进程已经被终止:waitFor()不会被阻止。我不知道你在问题中写的代码是否就是你运行的代码......但你必须小心,每执行一次脚本都要重新创建一个新的Process实例(也就是说,不要在同一个Process上多次调用start:第一次执行后就不行了


4
投票

此外,如果在 "命令 "中有输出,你应该通过以下方式读取标准输出和标准错误输出 stream(process.getErrorStream())process.getInputStream()).如果没有,且输出或错误输出为满,则 waitfor() 会被绞死。


3
投票

它将等待处理完成。解决办法

1 使用isAlive()

2 使用waitFor(long timeout, TimeUnit unit)(只有1.8)

© www.soinside.com 2019 - 2024. All rights reserved.