Мне нужно получить базовый PID ОС для запускаемого мной процесса.Решение, которое я использую сейчас, включает в себя доступ к приватному полю посредством отражения с использованием кода, подобного следующему:
private long getLongField(Object target, String fieldName) throws NoSuchFieldException, IllegalAccessException {
Field field = target.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
long value = field.getLong(target);
field.setAccessible(false);
return value;
}
Это работает, но есть несколько проблем с этим подходом, одна из которых заключается в том, что вам нужно проделать дополнительную работу надWindows, потому что специфичный для Windows подкласс Process не хранит поле «pid», а поле «handle» (так что вам нужно сделать немного JNA, чтобы получить фактический pid), а другой, который запускается с Java 9, вызываеткуча страшных предупреждений, таких как «ПРЕДУПРЕЖДЕНИЕ: произошла недопустимая операция доступа с отражением».
Итак, вопрос: есть ли лучший способ (чистый, независимый от ОС, гарантированный, чтобы не сломаться в будущем выпуске Java)получить пид?Разве это не должно быть разоблачено Java в первую очередь?