Кажется, вы ищете решение, ориентированное на 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
Если вы решите положиться на внешние инструменты, вам следует быть очень осторожным с переносимостью (параметры и выходные данные могут сильно различаться для двух ОС) и настройками локали.