process.waitFor(timeout, timeUnit) 没有按预期工作

process.waitFor(timeout, timeUnit) does not work as expected

我是 运行 一个使用 ProcessBuilder 的进程。 这是相关代码:

 ByteArrayOutputStream resultStream = new ByteArrayOutputStream();
 ByteArrayOutputStream errorMessage = new ByteArrayOutputStream();
 ProcessBuilder pb = null;

 pb = new ProcessBuilder("/usr/local/bin/convert", "-limit", "time", "50", "-", "-resize", maxWidth + "x" + maxHeight+">", "-quality", "82","png:-");

 System.out.println(pb.command());
 long startTime = System.currentTimeMillis();
 System.out.println("start time: " + startTime);
 Process process = pb.start();
 OutputStream stdIn = process.getOutputStream();
 copy(input, stdIn);
 stdIn.flush();
 stdIn.close();
 copy(process.getInputStream(), resultStream);
 copy(process.getErrorStream(), errorMessage);

 boolean exitStatus = process.waitFor(15, TimeUnit.SECONDS);
 if (!exitStatus) {
           System.out.println("Image processing failed with status " + exitStatus + ": " + errorMessage.toString());
 }

        input.close();

        System.out.println("returning");
        long endTime = System.currentTimeMillis();
        System.out.println(endTime);
        System.out.println("difference :" + (endTime - startTime)*1.0/1000 + " seconds");
        return resultStream.toByteArray();

差异是 90 秒,但我不应该在 15 秒后收到有关失败的错误消息吗?

注意事项: 我正在使用标准输入向进程提供输入,并将输出和错误流读取为字节数组。

正如 user1676075 所述,您 copy 方法一直运行到您的进程完成其输出,因此您在进程完成之前从未达到 process.waitFor,因此永远不会达到 waitFor returns 一个不完整的过程代码。