Подтвердить что ты не робот

Как изменить имя процесса приложения Java?

При выполнении приложения Java имя процесса, присвоенное ему, обычно java.exe или javaw.exe. Но как я могу заставить его вызываться по имени моего приложения?

4b9b3361

Ответ 1

Эти методы подходят для серверов с большим количеством запущенных java-процессов и где вам нужен быстрый способ найти правильный jvm (не используя jps.) Для приложений я полагаю, что start4j или другая оболочка - это путь.

В unix, если вы запускаете оболочку sript (по крайней мере для bash и, возможно, для других достойных оболочек), вы можете использовать:

exec -a goodname java ...

запустить java и передать "goodname" в качестве 0-го аргумента, который будет отображаться как имя процесса в ps и т.д.

Возможно, лучшей альтернативой (которая, похоже, работает и для top), является создание символической ссылки: ln -s /usr/bin/java /usr/local/bin/kallekula.

Ярлыки в окнах не будут делать трюк, но windows vista/7 поддерживает символические ссылки с помощью mklink. Это может сработать, но я не тестировал. Я не уверен, что exec -a также работает с cygwin bash в Windows.

Ответ 2

Отъезд launch4j, это исполняемая оболочка, которая позволяет назначать исполняемые имена.

Ответ 3

Если вы не запускаете Java через JNI в свой собственный исполняемый файл, имя процесса всегда будет java.exe.

Существует несколько java-пусковых установок/оболочек, которые могут сгенерировать этот исполняемый файл для вас.

  • Launch4j, выглядит как последний и актуальный
  • JSmooth
  • install4J, коммерческий, больше, чем вам нужно

Ответ 4

Если вы используете Sun JDK, вы также можете использовать инструмент командной строки "jps", чтобы получить подробный список процессов Java, запущенных в окне.

Ответ 5

Предполагая, что то, что вы на самом деле после этого, это способ закончить корректный процесс позже, тогда альтернативным решением является следующее:

Запустите ps -ef | grep java, и вы должны получить список, который выглядит примерно так:

 mruser    7518  7505  4 11:37 pts/3    00:00:00 /usr/bin/java -classpath MRD3030_Linked.jar peralex.MyApp

Затем pkill -f peralex.MyApp убьет правильный процесс.

Ответ 6

Это относится к Windows.
Я столкнулся с той же проблемой, когда мне нужно убить конкретную java-программу, используя taskkill. Когда я запускаю java-программу, список задач показывал ту же программу с именем изображения, установленным как java.exe. Но убить его с помощью taskkill/F java.exe остановит все другие приложения Java, отличные от запланированных, которые не требуются.

Итак, я запускаю одну и ту же программу java, используя:        

запустить "MyProgramName" java java-program..

Здесь команда start откроет новое окно и запустит java-программу с названием окна, установленным на MyProgramName.

Теперь, чтобы убить эту java-программу, используйте следующую команду taskkill:        

taskkill/fi "MyProgramName"

Ваша Java-программа будет только убита. Отдых не будет затронут.

Ответ 7

Не все ароматы exec поддерживают флаг -a. Если ваш нет, программа argv0 делает что-то подобное.

Ответ 8

Вы можете сделать это с помощью LD_PRELOAD shim: https://github.com/airlift/procname

Прокладка просто вызывает специфический для Linux prctl() при запуске процесса:

static void __attribute__ ((constructor)) procname_init()
{
   prctl(PR_SET_NAME, "myname");
}

Вызов должен выполняться в основном потоке, поэтому это невозможно сделать из Java или даже с помощью агента JVMTI, поскольку они происходят в другом потоке.

Ответ 9

Я решил ту же проблему, используя Janel. Это дает очень простой способ создать .jar для собственного исполняемого файла (exe) для Windows, который запускается как новая служба. Используйте следующий процесс для создания приложения Java в качестве исполняемого файла в Windows:

  • Загрузите и распакуйте файлы из janel.
  • Затем скопируйте два файла JanelWindows.exe, JanelWindows.lap в папку, в которой существует ваш .jar.
  • Теперь переименуйте файлы JanelWindows.exe и JanelWindows.lap в jarname.exe и jarname.lap
  • Теперь откройте jarname.lap в текстовом редакторе и задайте свойства:

    -Djava.class.path = путь к файлу .jar, janel.main.class= ipSetting.Start

Теперь вы можете открыть свойjar.exe как новый процесс. Надеюсь, это поможет кому-то...