【问题标题】:Java - Read output stream of existing processJava - 读取现有进程的输出流
【发布时间】:2012-03-21 08:15:09
【问题描述】:

我需要读取在 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 的消息。我该怎么做呢?

【问题讨论】:

  • 你的意思是要获取一个已经运行的进程的输出流吗?
  • @roni - 我相信这就是他想要做的。
  • 是的,我需要一个已经运行的进程的输出。
  • 我认为 JRE 不可能做到这一点。 ProcessBuilder 委托给 ProcessImpl,它只是构建并执行一个 shell 命令来启动一个新进程。

标签: java process j9


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-19
      • 1970-01-01
      • 2011-04-08
      • 1970-01-01
      • 2015-12-23
      • 2018-09-07
      • 1970-01-01
      相关资源
      最近更新 更多