При выполнении приложения Java имя процесса , данное ему, как правило , java.exe
или javaw.exe
. Но как я могу сделать это можно назвать по имени моего приложения?
как изменить имя процесса приложения Java?
Проверьте launch4j , это исполняемая оболочка , которая позволяет назначать имена исполняемых файлов.
Если вы не запускать Java с помощью JNI в собственном обычае построенного исполняемого файла, имя процесса всегда будет java.exe.
Есть несколько ява пусковыми / оберток, которые могут генерировать этот исполняемый файл для вас.
Если вы используете Sun JDK, вы можете также использовать инструмент «JPS» командной строки, чтобы получить подробный список Java процессов, запущенных на поле.
Эти методы подходят для серверов с большим количеством ява процессов работает, и где вам нужен быстрый способ найти правильный JVM (не используя JPS.) Для приложений, я полагаю launch4j или другой оберточный путь.
В UNIX, если вы запускаете из sript оболочки (по крайней мере, для Баша и, возможно, для других приличных оболочек), вы можете использовать:
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 Баш на Windows.
Предполагая, что вы на самом деле после того, как способ прекратить правильный правильный процесс позже, то альтернативное решение заключается в следующем:
Запуск 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
будет убивать правильный процесс.
Не все ароматы Exec поддерживают флаг -a. Если у вас нет, то argv0 программа делает что - то подобное.
Это специфично для Windows.
Я столкнулась с таким же вопросом , где я должен убить конкретную программу Java с помощью Taskkill . При запуске программы Java, Tasklist показывал ту же программу с именем изображения , установленного в java.exe . Но убивать его , используя Taskkill / F java.exe остановит все другие , кроме предназначенных один , который не требуется Java - приложений.
Так я бегу ту же программу Java с помощью:
начать "MyProgramName" Java Java-программы ..
Здесь начинают команда откроет новое окно и запустить программу Java с названием набора окна в MyProgramName .
Теперь эта ява убить-программу с помощью следующей команды Taskkill:
Taskkill / ц "MyProgramName"
Ваша программа Java будет только убить. Остальные не будут затронуты.
Вы можете сделать это с помощью LD_PRELOAD
регулировочной шайбы: https://github.com/airlift/procname
Прокладка просто вызывает Линукс , prctl()
когда начинается процесс:
static void __attribute__ ((constructor)) procname_init()
{
prctl(PR_SET_NAME, "myname");
}
Вызов должен происходить в основном потоке, так что это не возможно сделать это с Java или даже с агентом JVMTI, так как те происходят на другом потоке.
Во многих исполняемых обертках Java обычая ехе только пусковой и процесс все еще работает как обычный Java (ш) .exe. В WinRun4J с другой стороны, обычаем ех это процесс , который запускает приложение, так, например , в диспетчере задач пользовательского ехе является то , что кажется. Он поддерживает 32 бит и 64 бит, консольных и нет консоли (наряду с многочисленными вариантами конфигурации).