我需要获取我启动的进程的底层操作系统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开始它会触发一堆可怕的警告,如“WARNING: An illegal reflective access operation has occurred”。
因此问题是:是否有更好的方法(清洁、与操作系统无关、保证在将来的Java版本中不会出现问题)来获取pid?这一点难道不应该首先由Java公开吗?
toHandle()
和info()
方法及其返回的ProcessHandle
和ProcessHandle.Info
API。也许,您不再需要pid,因为您想要使用它的任何操作现在都可以直接使用Java API完成... - Holger