Получить версию Java запущенного процесса Java

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

jstack -l 23819 2014-11-12 12:36:11 Полный дамп потока Виртуальная 64-разрядная серверная виртуальная машина OpenJDK (смешанный режим 23.25-b01):

Демон "Прикрепить прослушиватель" prio=10 tid=0x000000000272f800 nid=0x614b, ожидание при условии [0x0000000000000000] java.lang.Thread.State: RUNNABLE

Заблокированные собственные синхронизаторы: - Нет

4 ответа

Вы можете сделать это через jcmd, вот так:

jcmd process_id VM.version

В Linux вы могли бы сделать

sudo strings /proc/<java_pid>/smaps |grep jre

который будет производить что-то похожее на

7f8ff82ac000-7f8ff82ad000 r-xp 00000000 fd:00 252363860 /usr/java/jdk1.8.0_141/jre/lib/amd64/libjaas_unix.so

Отсюда видно, какую версию JDK он использует.

Простое решение со стандартной командой будет выглядеть так:

lsof -p PID | grep jdk

Это дает вам список загруженных файлов по процессу.

Я думаю, что решение Эндрю лучше и, вероятно, то, что вы ищете. Тем не менее вот еще одно решение:

ps -A | grep "^ <the pid>" | grep -o "jdk.*.jdk"

Вывод для программы, которую я запускал:

jdk1.8.0_05.jdk
Другие вопросы по тегам