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



этот вопрос уже есть ответ здесь:




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

    8 ответов



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



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



java -processname MyProgram -jar MyProgram


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



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

710   8  

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

    Ничего не найдено.