Java - чтение выходного потока существующего процесса - PullRequest
1 голос
/ 03 марта 2012

Мне нужно прочитать вывод процесса, запущенного в 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, а не существующий процесс.

Мне нужно получить все сообщения, которые регистрируются в System.out из j9console (существующего процесса). Как мне это сделать?

Ответы [ 2 ]

4 голосов
/ 03 марта 2012

Это невозможно при использовании чистой Java. Вам придется написать собственную библиотеку, которая выполняет низкоуровневые вызовы функций ОС, и предоставить библиотеку Java через JNI. Даже на собственном уровне ОС может не иметь системных вызовов, обеспечивающих эту возможность, в зависимости от ОС - это необычная задача, которую вы просите, что обычно делают только отладчики. Например. * GDB 1002 *.

2 голосов
/ 03 марта 2012

Вы должны были бы организовать для процесса запись его вывода в именованный канал, и чтобы Java читал этот канал.Надеюсь, вы не на Windows!

...