Кажется, вы ищете решение, ориентированное на Linux, а не портативное. В Linux простой, эффективный и надежный способ получить необходимую информацию из Java - это использовать файловую систему proc , особенно каталог /proc/self . man 5 proc manpage описывает каждый файл.
pid - это первое поле /proc/self/stat . Название изображения - второе.
Очень легко написать класс, чтобы обернуть эти вызовы. Это будет всего несколько строк кода, выполняющих базовый ввод-вывод: быстрый и надежный. Использование сторонних программ сложнее и менее эффективно.
Это решение не переносимо, так как большинство систем Unix не имеют файловой системы proc . У вас есть четыре варианта от лучшего к худшему, ИМХО:
- Захватите необходимую информацию перед началом процесса: может быть легко или нет в зависимости от вашего приложения
- Найдите чистые и специфичные для системы реализации, такие как файловая система
proc для Linux
- Используйте неуказанный API.
RuntimeMXBean.getName() обычно возвращает pid , вы также можете использовать отражение, чтобы получить доступ к java.lang.UnixProcess.pid . Реализация может отличаться между JVM и может измениться в любое время. Приемлемые решения, если вы контролируете окружающую среду.
- Написать собственный код для доступа к API POSIX
- Используйте внешние инструменты, такие как
ps
Если вы решите положиться на внешние инструменты, вам следует быть очень осторожным с переносимостью (параметры и выходные данные могут сильно различаться для двух ОС) и настройками локали.