ProcessBuilder和Process.waitFor(),等待多长时间?

KJa*_*aeg 9 java console process wait processbuilder

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

 builder = new ProcessBuilder(commands);
 builder.redirectErrorStream(true);
 Process process = builder.start();
 process.waitFor();
Run Code Online (Sandbox Code Playgroud)

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

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

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

ben*_*n75 8

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

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


Evg*_*eev 5

它将等到该过程完成。解决方法:

1 使用isAlive()

2次使用waitFor(long timeout, TimeUnit unit)(仅1.8)


小智 5

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