在java9中 提供了pid()方法,直接调用即可,如下:
p = new ProcessBuilder().command("echo", "test").start();
p.pid();
在java8中,需要通过反射获取Process类对象的pid属性,代码如下:
@Synchronized
fun getPidOfProcess(p: Process): Long {
var pid: Long = -1
try {
//依赖JDK的不同,Process的实现类可能是java.lang.UNIXProcess或java.lang.ProcessImpl
if (p.javaClass.name == "java.lang.UNIXProcess" || p.javaClass.name == "java.lang.ProcessImpl") {
val f: Field = p.javaClass.getDeclaredField("pid")
f.isAccessible = true
pid = f.getLong(p)
f.isAccessible = false
}
} catch (e: Exception) {
pid = -1
}
return pid
}