java-子进程在Windows中既不会完成也不会中止?
作者:互联网
如何使我的java父进程等到子进程完成.我尝试使用runtime.exec和processBuilder.pb:
String cmd = "ffmpeg -i input.vob output.mp4"
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(cmd);
proc.waitFor();
这对于较小的输入文件(例如,小于10 Mb)可以正常工作.如果我提供较大的输入文件,则程序将被挂起.输出文件将被部分创建,文件创建将被挂起,控件将不会返回.甚至proc.join(10000);没有给出任何有用的结果.在此,父进程在子进程(ffmpeg)完成之前终止.
如何克服这个问题?
解决方法:
您需要读取过程输出的数据.
一个进程有2个输出流:标准输出和错误输出.您必须阅读两者,因为该过程可能会写入这两个输出.
流程的输出流具有缓冲区.如果输出流的缓冲区已满,则尝试通过该进程向其写入更多数据的尝试将被阻止.
做这样的事情:
InputStream in = proc.getInputStream(); // To read process standard output
InputStream err = proc.getErrorStream(); // To read process error output
while (proc.isAlive()) {
while (in.available() > 0)
in.read(); // You might wanna echo it to your console to see progress
while (err.available() > 0)
err.read(); // You might wanna echo it to your console to see progress
Thread.sleep(1);
}
标签:runtime-exec,ffmpeg,java 来源: https://codeday.me/bug/20191121/2050771.html