获取继承父 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
我无法获取子进程的输出。通常我会使用 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