2011-12-13 2 views
0

Я пишу программу, которая контролирует приложения Java. Я хотел бы следить за состоянием родных процессов и знать, когда они выходят. Это отлично; Java дает мне объект Process, и я могу ждатьFor() на нем.Java Native Process Library

Однако проблема заключается в том, что если моя программа умирает, я бы хотел, чтобы она получила ссылку на обратный процесс, чего он не может сделать на Java, потому что он никогда не создавал этот процесс. Мое первое предположение заключалось в том, чтобы отправить объект процесса через RMI и вернуть клиентское приложение обратно при повторном подключении, но это не сработает, потому что процесс не является сериализуемым.

Я могу придумать способ сделать это изначально с помощью JNA на Windows, но кто-нибудь знает, есть ли существующая библиотека, которая это сделает?

Cheers!

+0

jvmstat может представлять интерес. Стандартный JDK-инструмент jvisualvm находит приложения на базе Java, которые он не запускал. –

ответ

2

Вы можете использовать WMI для реализации этого в Windows и утилиты командной строки в Unix (если вам нужно). Я знаю следующие инструменты для работы с WMI: JaWin, WIntegra, JInterop.

Если ваш монитор работает в окнах, вы также можете использовать JaWin. Это оболочка JNI поверх COM + API. Если вы хотите быть перекрестной платформой и иметь возможность контролировать машину Windows с компьютера Unix, используйте JInterop. Это библиотека с открытым исходным кодом, которая реализует протокол DCOM в чистой java. JIntegra похожа, но коммерческая.

EDIT: возможно, даже более простое решение. Если вы хотите контролировать приложение Java, просто используйте JMX. Подключитесь к этому приложению с помощью JMX либо удаленно, либо локально.

Удачи.

+0

Спасибо. На самом деле мы уже используем JMX, проблемы, которые возникают у нас, вызваны тем, что приложения не реагируют, и мы хотим их убить. На самом деле, я бы никогда не стал писать это с нуля - там гораздо более элегантные решения, но это устаревший код, поэтому я ничего не могу сделать. – Andrew