获取继承父 IO 的子进程的输出

Getting the output of a subprocess that inherited parent's IO

我无法获取子进程的输出。通常我会使用 process.getInputStream()。但是,在这种情况下,我将子进程设置为继承父进程的 IO。我需要这样做,因为子进程的输出超过了内核设置的缓冲区,因此会挂起。我正在使用 Linux 顺便说一句。

    //creating a named pipe
    File fifo = fifoCreator.createFifoPipe("fifo");
    String[] command = new String[] {"cat", fifo.getAbsolutePath()};
    process = new ProcessBuilder(command).inheritIO().start(); //Inherit IO

    FileWriter fw = new FileWriter(fifo.getAbsoluteFile());
    BufferedWriter bw = new BufferedWriter(fw);
    bw.write(boxString);
    bw.close();
    process.waitFor();
    fifoCreator.removeFifoPipe(fifo.toString());

    //Gets nothing here
    stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
    String input = readAllLines(stdInput);

理想情况下,我希望将所有内容都保存在内存中,因为我想要良好的性能和更少的垃圾。

有没有办法将子进程的输出重定向到某种数据结构?如果没有,有什么办法可以得到输出吗?

我正在考虑创建一个单独的线程来获取输出流。

为避免内核缓冲区问题,您可以使用线程来读取输出,如 this question 中所示。他们称之为 StreamGobbler