ProcessBuilder 和 Process.waitFor(),它要等多久?
ProcessBuilder and Process.waitFor(), how long does it wait?
我正在使用 ProcessBuilder class and the Process class 从 java 执行一个 .exe 文件。解释一下我在做什么:
builder = new ProcessBuilder(commands);
builder.redirectErrorStream(true);
Process process = builder.start();
process.waitFor();
我只是想知道,"waitFor()"要等多久?是等到我的.exe执行完毕,还是等到它执行完毕?
我的 .exe 是编译好的 AutoIt 脚本。这意味着,可能会有像鼠标移动这样的交互,这需要一些时间。
所以我需要知道我的 Java-代码执行是否在调用 .exe 之后继续,或者它是否真的在等待它。
我想实现的是两个脚本的轮流执行,但恐怕我的Java代码正在执行第二个脚本,而第一个脚本仍在运行。
有没有人解决这个问题?我很高兴有任何想法。
您当前的执行线程将在 process.waitFor()
上被阻塞,直到进程终止(即执行完成)。
来源 here
另请注意,如果进程已终止:waitFor() 将不会被阻止。我不知道你在问题中输入的代码是否正是你 运行...在同一个进程上启动多次:第一次执行后将不起作用)
它将等到过程完成。解决方法:
1 使用 isAlive()
2 使用waitFor(long timeout, TimeUnit unit) (Only 1.8)
此外,如果"commands"中有输出。你应该通过stream(process.getErrorStream())
和process.getInputStream())
读取标准输出和标准错误输出。如果没有并且输出或错误输出已满,则waitfor()
将被挂起。
我正在使用 ProcessBuilder class and the Process class 从 java 执行一个 .exe 文件。解释一下我在做什么:
builder = new ProcessBuilder(commands);
builder.redirectErrorStream(true);
Process process = builder.start();
process.waitFor();
我只是想知道,"waitFor()"要等多久?是等到我的.exe执行完毕,还是等到它执行完毕?
我的 .exe 是编译好的 AutoIt 脚本。这意味着,可能会有像鼠标移动这样的交互,这需要一些时间。 所以我需要知道我的 Java-代码执行是否在调用 .exe 之后继续,或者它是否真的在等待它。
我想实现的是两个脚本的轮流执行,但恐怕我的Java代码正在执行第二个脚本,而第一个脚本仍在运行。 有没有人解决这个问题?我很高兴有任何想法。
您当前的执行线程将在 process.waitFor()
上被阻塞,直到进程终止(即执行完成)。
来源 here
另请注意,如果进程已终止:waitFor() 将不会被阻止。我不知道你在问题中输入的代码是否正是你 运行...在同一个进程上启动多次:第一次执行后将不起作用)
它将等到过程完成。解决方法:
1 使用 isAlive()
2 使用waitFor(long timeout, TimeUnit unit) (Only 1.8)
此外,如果"commands"中有输出。你应该通过stream(process.getErrorStream())
和process.getInputStream())
读取标准输出和标准错误输出。如果没有并且输出或错误输出已满,则waitfor()
将被挂起。