Получить версию 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