Как мне установить имя процесса для Java-программы? [Дубликат]

This question already has an answer here:

how to change the name of a Java application process? 8 answers

Если Java-программа запускается, она получает в системном мониторе процессов имя java. Многие Java-программы так трудно отличить. Поэтому было бы неплохо, если бы существовал способ установить имя, которое будет отображаться в мониторе процесса. Мне известно, что это может работать по-разному в разных операционных системах.

Простой способ был бы, если бы Java-интерпретатор поддерживал переключатель для установки имени, например так:

<code>java -processname MyProgram -jar MyProgram
</code>

Но я не смог найти такой переключатель, поэтому он, вероятно, не существует. API в Java для установки имени процесса также подойдет.

Итак, у вас есть предложения?

Ответы на вопрос(8)

вам нужно будет создать свой собственный двоичный файл для запуска приложения Java, используя что-то вродеJSmooth.

Посмотрите на этот вопрос для обсуждения создания таких двоичных файлов.

http://launch4j.sourceforge.net/

There is a bug logged in the sun bugtracker for this, but it's not high priority http://bugs.sun.com/view_bug.do?bug_id=6299778

Решение Вопроса

возможно ли это, но вы могли бы использовать инструмент командной строки, поставляемый с JDK, называемый «jps». Это как * nixps, но только программы на Java.jps -v показывает все аргументы, которые вы передали в Java.

Кроме того, я видел, как люди прикрепляли «имя процесса» к своим процессам Java, добавив неиспользованный-Dmyprocessname в args.

 04 дек. 2012 г., 18:33
+1 для идеи -D, не получается намного быстрее или проще, чем
 26 янв. 2012 г., 06:27
Из-за отсутствия setproctitle это умное решение. Престижность.
 09 окт. 2016 г., 18:19
Похоже, это не работает в Windows. Какая правильная команда?
 Mnementh29 июн. 2009 г., 12:20
Не совсем ответ на этот вопрос, который я спросил, но именно правильный ответ на мою проблему. Благодарю. :-)
 17 июл. 2012 г., 10:10
Я также ищу подобные варианты. Но этот ответ мне не понятен. Может кто-нибудь объяснить мне, как установить имя процесса. Я видел, что есть опция под названием «-D & lt; имя & gt; = значение». Нужно ли использовать эту опцию? Благодарю.

LD_PRELOAD прокладка:https://github.com/airlift/procname

Шим просто называет Linux специфичнымprctl() когда процесс начинается:

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

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

 19 февр. 2016 г., 07:33
Это работает очень хорошо и является более простым подходом, чем большинство здесь
 21 февр. 2016 г., 04:07
Этот код настолько тривиален (он вызывает только одну функцию), что даже не кажется защищенным авторским правом. Пожалуйста, рассмотрите это как общественное достояние. Если хотите, я могу добавить файл ЛИЦЕНЗИИ.
 20 февр. 2016 г., 10:11
Я хотел бы рассмотреть возможность использования этого кода, если код был лицензирован в соответствии с MIT, Apache или каким-либо другим подобным лицензионным соглашением.

один из них уже описан: использование таких инструментов, как Launch4j, WinRun4J, для создания собственных средств запуска Windows.

Другой подход, который кажется более подходящим, заключается в использовании Apache Procrun для упаковки Java-приложения в качестве службы Windows. В процессе установки службы мы можем дать процессу осмысленное имя, например OurApp.exe.

Все, что нам нужно сделать, это переименовать prunsrv.exe в OurApp.exe и заменить каждое вхождение prunsrv.exe в наших сценариях установки / запуска | удаления | на MyApp.exe.

Смотрите больше изИспользование Apache Procrun для переименования имени процесса Java-программы в Windows

идея изменить имя процесса показалась мне невозможной. Однако согласноэта древняя ветка на солнечном форуме вы можете использовать обертки C ++ вокруг исполняемого файла JVM для достижения этой цели.

Хотя, честно говоря, мне интересно, какова ваша настоящая проблема, как я полагаю, есть более стандартное решение, чем попытка изменить имя процесса.

 21 сент. 2018 г., 01:36
@pdem увидеть этот вопрос:stackoverflow.com/questions/33186661/…  Суть в том, чтобы использовать launch4j. Приношу свои извинения за ответ, который является просто ссылкой. Я был молод и лучше не знал.
 12 сент. 2018 г., 11:54
Как обычно, ссылка была удалена.
 Mnementh29 июн. 2009 г., 13:30
Вы правы, jps-команда, упомянутая omerkudat, решает проблему, не переименовывая процессы.
 29 июн. 2009 г., 11:02
Если бы вам пришлось убить ваше приложение и запустить несколько Java-приложений, это было бы немного хитом.
 30 июн. 2009 г., 05:52
Создание маленькой нативной оболочки JNI для запуска приложения также очень просто. Для тех из нас, кто занимается развертыванием Windows, он позволяет автоматически настраивать JVM, настраиваемые значки и т. Д. Это действительно не сложно сделать.

как @omerkudat сказал:

jps -v

распечатывает все процессы Java {processID, список параметров} Если списка параметров недостаточно для распознавания приложений, которые вам нужны, попробуйте добавить несколько фиктивных параметров при запуске:

java -Dname=myApp -cp  myApp.jar some.client.main.MainFrame

Это будет печатать как:

7780 MainFrame -Dname=myApp

и вы можете использовать идентификатор процесса, чтобы убить / контролировать его.

что Java-приложения на самом деле не являются исполняемыми, их запускает виртуальная машина Java, поэтому java появляется в мониторе процесса, он является хостом вашего приложения.

Такие вещи, как LimeWire, однако, делают, но я думаю, что это больше зависит от GCJ -http://gcc.gnu.org/java/

Ваш ответ на вопрос