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

54

This question already has an answer here:

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

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

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

java -processname MyProgram -jar MyProgram

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

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

Ваш Ответ

8   ответов
2

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

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

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

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

11

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

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

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

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

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

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

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

46

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

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

Не совсем ответ на этот вопрос, который я спросил, но именно правильный ответ на мою проблему. Благодарю. :-) Mnementh
Из-за отсутствия setproctitle это умное решение. Престижность.
+1 для идеи -D, не получается намного быстрее или проще, чем
Похоже, это не работает в Windows. Какая правильная команда?
Я также ищу подобные варианты. Но этот ответ мне не понятен. Может кто-нибудь объяснить мне, как установить имя процесса. Я видел, что есть опция под названием «-D & lt; имя & gt; = значение». Нужно ли использовать эту опцию? Благодарю.
4

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

5

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

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

Вы правы, jps-команда, упомянутая omerkudat, решает проблему, не переименовывая процессы. Mnementh
Создание маленькой нативной оболочки JNI для запуска приложения также очень просто. Для тех из нас, кто занимается развертыванием Windows, он позволяет автоматически настраивать JVM, настраиваемые значки и т. Д. Это действительно не сложно сделать.
Как обычно, ссылка была удалена.
Если бы вам пришлось убить ваше приложение и запустить несколько Java-приложений, это было бы немного хитом.
@pdem увидеть этот вопрос:stackoverflow.com/questions/33186661/…  Суть в том, чтобы использовать launch4j. Приношу свои извинения за ответ, который является просто ссылкой. Я был молод и лучше не знал.
19

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

jps -v

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

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

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

7780 MainFrame -Dname=myApp

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

1

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

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

Похожие вопросы