Обнаружение / управление процессом - PullRequest
2 голосов
/ 18 июня 2009

У меня есть Java-приложение, в котором я хочу проверить, запущено ли приложение. Если он не запущен, я хочу его запустить. Если он работает, я хочу его убить, а затем перезапустить.

Может кто-нибудь сказать мне, как это сделать? Я могу достаточно легко запустить / остановить программу с помощью ProcessBuilder. Но я не могу обнаружить процесс, который уже запущен.

Спасибо за вашу помощь! John

Ответы [ 4 ]

1 голос
/ 18 июня 2009

Без взаимодействия с приложением (в идеале, прослушивание через сетевой порт) это может быть невозможным (ваше приложение Java может не иметь прав на удаление приложения) и требует кода, специфичного для ОС. В Linux вы должны использовать команды ps и kill.

0 голосов
/ 18 июня 2009

Спасибо за ответы. Это было то, чего я боялся. Мы пытаемся НЕ добавлять больше вещей в приложение, которое я хочу запустить. В основном мы пытаемся добавить веб-интерфейс удаленного управления в коллекцию приложений.

Приложение веб-сервера, которое я пишу, в основном запускает / останавливает 3 приложения, которые все общаются друг с другом для достижения цели. Если мой веб-сервер запускает и останавливает их, все хорошо. Но если по какой-то причине они уже запущены, когда я пытаюсь их запустить, происходят плохие вещи.

Я знаю, что могу справиться с Visual Studio (C ++ / C # / etc). Но этот проект должен быть написан на Java из-за требования независимости платформы.

Спасибо всем за помощь!

0 голосов
/ 18 июня 2009

Является ли другое приложение (процесс, который вы контролируете) под вашей ответственностью? Если это так, вы можете использовать метод, который я использовал в какой-то системе высокой доступности несколько лет назад: Откройте соединение с этим другим приложением и «пингуйте» его. Если другое приложение не отвечает в течение заданного времени ожидания, оно либо выключено, либо «зависло», что так же плохо (и то, что вы не можете обнаружить с помощью мониторинга процесса). Открытие соединения может быть выполнено с использованием сокетов или с использованием более сложных протоколов (SOAP?). Альтернативой является то, чтобы приложение отправляло сообщение «Я жив» время от времени. Если вы не получили его через некоторое время - ваше приложение требует перезапуска. Чтобы фактически «убить» другой процесс, вы можете сохранить экземпляр Process, полученный из метода exec (), и уничтожить его (), если захотите.

0 голосов
/ 18 июня 2009

Может показаться глупым, но вы можете создать файл с известным именем при запуске приложения. Не нужно ничего содержать. Чтобы проверить, работает ли ваше приложение, проверьте, существует ли этот файл.

...