Статьи

JDK 10: доступ к идентификатору процесса приложения Java из Java

Популярный вопрос на StackOverflow.com : « Как Java-программа может получить свой собственный идентификатор процесса? «Есть несколько ответов, связанных с этим вопросом, включая синтаксический анализ String возвращаемой ManagementFactory . getRuntimeMXBean () . getName () [но это может обеспечить «произвольную строку»], используя ProcessHandle . getPid () [ JEP 102 ], используя Java Native Access (JNA), используя Системный сборщик информации и репортер (SIGAR), используя JavaSysMon , используя Java Native Runtime — POSIX , анализируя результаты jps (или jcmd ) через вызов Runtime . getRuntime () . exec (String) и другие подходы. JDK 10 представляет, пожалуй, самый простой подход для получения PID процесса JVM с помощью нового метода в RuntimeMXBean .

JDK-8189091 («MBean доступ к PID») представляет метод RuntimeMXBean getPid () в качестве метода интерфейса по умолчанию для JDK 10 . Эта проблема гласит «Проблема» следующим образом: «Платформа MBean не предоставляет API для получения идентификатора процесса работающей JVM. Некоторые инструменты JMX полагаются на горячую точку реализации RuntimeMXBean :: getName, которая возвращает <pid> @ <hostname>. » Эта проблема также предоставляет «Решение»: «Введен новый API java.lang.management.RuntimeMXBean.getPid , так что инструменты JMX могут напрямую получать идентификатор процесса вместо того, чтобы полагаться на детали реализации, RuntimeMXBean#getName().split("@")[0]

Следующий листинг кода является простым и демонстрирует использование этого нового getPid() в RuntimeMXBean .

Использование JDK 10 RuntimeMXBean.getPid()

1
2
3
4
5
final RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();
final long pid = runtime.getPid();
final Console console = System.console();
out.println("Process ID is '" + pid + "' Press <ENTER> to continue.");
console.readLine();

Когда приведенный выше код содержится в исполняемой main(String[]) и эта функция выполняется из командной строки, выходные данные будут такими, как показано на следующем снимке экрана (который также включает отдельный терминал, используемый для проверки правильности PID). через JCMD).

Идентификатор процесса предоставляется как long и анализ «произвольной строки» не требуется. Этот подход также не требует сторонней библиотеки или сложного кода для определения идентификатора текущего процесса Java.

Эта статья содержит краткое введение в то, что, возможно, будет самым простым подходом для Java-приложения (написанного с использованием JDK 10 или более поздней версии) для определения собственного базового идентификатора процесса.

Опубликовано на Java Code Geeks с разрешения Дастина Маркса, партнера нашей программы JCG . См. Оригинальную статью здесь: JDK 10: Доступ к идентификатору процесса приложения Java из Java

Мнения, высказанные участниками Java Code Geeks, являются их собственными.