Java - 读取现有进程的输出流

时间:2012-03-02 20:24:45

标签: java process j9

我需要读取在IBM j9上运行的进程的输出(模拟器JVM到windows mobile)。我试过这个:

Process p = Runtime.getRuntime().exec("j9.exe");

BufferedReader br = new BufferedReader(new InputStreamReader(
      p.getInputStream()));

String stringLog;
while ((stringLog = br.readLine()) != null) {
   System.out.println(stringLog + "\n");
}

但它没有用,因为它返回了j9.exe的新实例,而不是现有的进程。

我需要从j9console(现有进程)获取所有正在记录到System.out的消息。我该怎么做呢?

2 个答案:

答案 0 :(得分:4)

使用纯Java是不可能的。您必须编写一个本机库来进行低级OS函数调用,并通过JNI将库公开给Java。即使在本机级别,操作系统也可能没有提供此功能的系统调用,具体取决于操作系统 - 这是您要求的一项不寻常的任务,通常只能由调试器完成。例如。 gdb

答案 1 :(得分:2)

您必须安排进程将其输出写入命名管道,并让Java读取该管道。希望你不在Windows上!