Как я могу установить имя процесса для Java-программы? [дубликат]
этот вопрос уже есть ответ здесь:
как изменить имя процесса приложения Java?
8 ответов
если запускается программа Java, она попадает в системный процесс-контролируйте имя java. Многие Java-программы таким образом трудно отличить. Поэтому было бы неплохо, если существует способ, установить имя, которое будет показано в монитор процесса. Я знаю, что это может работать по-разному на разных операционных системах.
простой способ был бы, если java-интерпретатор будет поддерживать переключатель для установки имени, например:
java -processname MyProgram -jar MyProgram
но я не мог найти такой переключатель, поэтому он, вероятно, не существует. API в Java для установки имени процесса также будет в порядке.
Итак, у вас есть какие-либо предложения?
8 ответов:
Я не знаю, возможно ли это, но вы можете использовать инструмент командной строки, который поставляется с JDK под названием "jps". Это как *nix
ps, но вместо этого просто Java-программ.jps -vпоказывает все аргументы, которые вы передали java.кроме того, я видел, как люди прикрепляют "имя процесса" к своим процессам java, добавляя неиспользуемый
-Dmyprocessnameна аргументы.
как сказал @omerkudat:
jps -vвыводит все процессы java {processID, params list} Если списка параметров недостаточно для распознавания необходимых приложений, попробуйте добавить некоторые фиктивные параметры при их запуске:
java -Dname=myApp -cp myApp.jar some.client.main.MainFrameЭто будет печатать как:
7780 MainFrame -Dname=myAppи вы можете использовать идентификатор процесса, чтобы убить / следить за ним.
вы можете сделать это с помощью
LD_PRELOADпрокладка:https://github.com/airlift/procnameпрокладка просто вызывает Linux-specific
prctl()при запуске процесса:static void __attribute__ ((constructor)) procname_init() { prctl(PR_SET_NAME, "myname"); }вызов должен происходить в основном потоке, поэтому это невозможно сделать с Java или даже с агентом JVMTI, так как они происходят в другом потоке.
когда я впервые прочитал это, идея изменения имени процесса поразила меня как невозможная. Однако, согласно эта древняя нить на солнечном форуме вы можете использовать обертки C++ вокруг исполняемого файла JVM для достижения этой цели.
хотя, честно говоря, мне интересно, в чем ваша настоящая проблема, поскольку я предполагаю, что есть более стандартное решение, чем попытка изменить имя процесса.
ваш лучший вариант - это что-то вроде launch4j http://launch4j.sourceforge.net/
есть ошибка, зарегистрированная в sun bugtracker для этого, но это не высокий приоритет http://bugs.sun.com/view_bug.do?bug_id=6299778
Если вы хотите использовать другое имя процесса, вам придется создать свой собственный двоичный файл, чтобы запустить приложение Java, используя что-то вроде JSmooth.
смотреть на этот вопрос для обсуждения создания таких программ.
Это потому, что Java-приложения на самом деле не исполняются, они запускаются виртуальной машиной Java, поэтому java появляется в мониторе процессов, это хост вашего приложения.
такие вещи, как LimeWire, однако, но я думаю, что это больше похоже на GCJ -http://gcc.gnu.org/java/
есть в основном 2 подхода: один, как уже описано: с помощью таких инструментов, как Launch4j, WinRun4J для создания собственных пусковых установок Windows.
другой подход, который кажется лучше использовать Apache Procrun для обертывания приложения java в качестве службы Windows. Во время процесса установки службы, мы можем дать процессу значимое имя, такое как OurApp.исполняемый.
все, что нам нужно сделать, это переименовать prunsrv.exe для нашего приложения.exe и заменить каждое появление prunsrv.exe в наш установка|запуск|остановка / удаление сценариев службы в MyApp.исполняемый.
с использование Apache Procrun для переименования имени процесса Java-программы в Windows
Comments