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