0
我用processbuilder fork了一个子进程,并且我想要得到子进程的输出。因此我使用getInputStream进程来获取子进程的输出。我发现父进程只能读取子进程的输出子流程的子流程出口或Std.out关闭。Jave进程从子进程getInputStream
子流程的System.out.flush()不起作用。
但我需要得到很多次的输出。我怎么能在这个场合呢?
我用processbuilder fork了一个子进程,并且我想要得到子进程的输出。因此我使用getInputStream进程来获取子进程的输出。我发现父进程只能读取子进程的输出子流程的子流程出口或Std.out关闭。Jave进程从子进程getInputStream
子流程的System.out.flush()不起作用。
但我需要得到很多次的输出。我怎么能在这个场合呢?
如果没有看到您的代码,并且确切知道您的子进程中具体是什么,则很难提供帮助。下面是一个适用于我的示例,其中子流程输出文本,等待三秒钟,然后打印出更多文本。在我的机器上(Windows XP上的Java 6),我看到了初始文本,暂停和剩余文本 - 所有这些都在子进程退出之前完成。
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
public class TestProcessBuilder
{
public static void main(String args[])
{
try
{
String threeCommands[] =
{ "cmd", "/c",
"dir", // prints out text
"&&",
"ping", "127.0.0.1", "-n", "3", ">", "nul", // waits 3 seconds
"&&",
"dir" // prints out more text
};
ProcessBuilder builder = new ProcessBuilder(threeCommands);
builder.directory(new File("C://"));
builder.redirectErrorStream();
Process subProcess = builder.start();
// this reads from the subprocess's output stream
BufferedReader subProcessInputReader =
new BufferedReader(new InputStreamReader(subProcess.getInputStream()));
String line = null;
while ((line = subProcessInputReader.readLine()) != null)
System.out.println(line);
subProcessInputReader.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
谢谢您answer.Now我已经改变输出到一个临时文件,但我真的想知道如何做两个流连接together.I认为父进程无法访问子进程的内存所以两个进程之间的通信是由OS支持的,那么子进程会将它的数据输出到由OS分配的内存区域中,然后父进程会从内存中读取它。我很好奇它是如何工作的。 – user1749075 2013-04-08 08:35:10