использование javaw для запуска jars в пакетных файлах приводит к нескольким процессам java в проводнике процессов - XYNTService - PullRequest
0 голосов
/ 22 февраля 2012

У меня несколько странная проблема.У меня есть Java-приложение, которое устанавливает несколько служб, которые работают как Jars.Ранее я использовал установленную Java для запуска этих JAR-файлов.Существует четыре службы, и все они будут созданы из одного пакетного файла с последовательным вызовом друг друга.Примерно так:

start %JAVA_HOME% commandtoruntjarfile

будет работать, и все четыре службы будут работать в фоновом режиме, и только один java.exe будет виден в проводнике процессов.Таким образом, у меня была установлена ​​другая служба в качестве службы Windows, которая могла бы остановить эти службы, вызвав команду bat или shutdown shutdown.

Теперь требование клиента изменилось на использование внутренней версии Java.Я извлекаю java в местоположение, создаю собственное имя переменной окружения "ABC_HOME", и требуемый синтаксис в пакете изменяется на

%ABC_HOME%\javaw commandtorunjarfile

. При запуске он работает.но это не остановить.Когда я захожу в Process Explorer, я вижу 4 java.exe, которые запускаются каждая для четырех команд run в командном файле.Если я остановлю службу Windows, все четыре продолжают работать.Если я перезапускаю службу Windows, число java.exe в проводнике процессов увеличивается до восьми и продолжает расти до тех пор, пока Windows не будет достаточно.

Как мне обойти это?Я думаю, что решение должно состоять в том, чтобы иметь один Java-процесс в Process Explorer, но я не могу найти какое-либо решение для этого.

[РЕДАКТИРОВАТЬ] Четыре подуслуги на самом деле являются процессами XYNT.В обычном сценарии это будет что-то вроде этого [Process1] CommandLine = java -Xrs -DasService = yes -cp jarfiles WorkingDir = c: bin scache PauseStart = 1000 PauseEnd = 1000 UserInterface = Нет перезагрузки = Да

Дляпри использовании java из определенного местоположения потребовалось следующее изменение

CommandLine = %JAVA_PATH%\bin\java.exe -Xrs -DasService=yes -cp jarfiles

, но это не сработало бы, так как не приняло бы переменную пути в файле XYNT.ini.поэтому я вызвал командный файл здесь, и в этом командном файле я использовал приведенный выше код.Вот как выглядит это изменение:

CommandLine = batchfile.bat

и в batchfile.bat

%JAVA_PATH%\bin\java.exe -Xrs -DasService=yes -cp jarfiles

1 Ответ

0 голосов
/ 22 февраля 2012

Обычно каждая Java-программа, запущенная в вашей системе, имеет собственную виртуальную машину, что означает: один java.exe / javaw.exe на экземпляр вашей программы.

Я не могу сказать, почему это сработало с вашей точки зрения с java.exe, как вы описали вначале, но поведение, которое вы описали для javaw.exe (с 4 процессами java в проводнике процессов), было бы тем, что я ' Я ожидал.

Для меня вопрос не в том, почему вы видите процессы Java 4 против 1, а в том, как вы можете запускать / останавливать «сервисы». Внешнее уничтожение Java VM не кажется очень хорошим решением. Я бы подумал о том, чтобы встроить некоторые IPC в службы Java, которые позволят вам корректно завершать процессы.

...