系统相关
首页 > 系统相关> > java-子进程在Windows中既不会完成也不会中止?

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