在java9中 提供了pid()方法,直接调用即可,如下:

p = new ProcessBuilder()mand("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
    }

更多推荐

java获取Process对象的pid