我需要为启动的进程获取基础的OS PID。我现在使用的解决方案包括使用如下代码通过反射访问私有字段:
current_theme = shopify.Theme.find_first(role="main")
theme_css = shopify.Asset.find(key='assets/theme.scss.liquid',
theme_id=current_theme.id)
它可以工作,但是这种方法存在几个问题,一个是您需要在Windows上做额外的工作,因为Windows特定的Process子类不存储“ pid”字段,而是存储“ handle”字段(因此您需要做一些JNA来获取实际的pid),另一种情况是,从Java 9开始,它会触发一堆可怕的警告,例如“警告:发生了非法的反射访问操作”。
那么问题是:是否有更好的方法(干净,独立于操作系统,保证在将来的Java版本中不中断)获取pid?首先不应该由Java公开吗?
答案 0 :(得分:7)
您可以利用Java9中引入的Process#pid
,其示例如下:
ProcessBuilder pb = new ProcessBuilder("echo", "Hello World!");
Process p = pb.start();
System.out.printf("Process ID: %s%n", p.pid());
该方法的文档为:
* Returns the native process ID of the process.
* The native process ID is an identification number that the operating
* system assigns to the process.
同样值得注意的是
* @throws UnsupportedOperationException if the Process implementation
* does not support this operation