如何在Java程序中获取我刚刚开始的进程的PID?

2022-08-31 12:01:12

我已使用以下代码启动了一个过程

 ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "path");
 try {
     Process p = pb.start();       
 } 
 catch (IOException ex) {}

现在我需要知道我刚刚开始的过程。


答案 1

由于Java 9类有了新方法long pid(),所以它就像Process

ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "path");
try {
    Process p = pb.start();
    long pid = p.pid();      
} catch (IOException ex) {
    // ...
}

答案 2

目前还没有用于此目的的公共 API。参见太阳虫4244896,太阳虫4250622

解决方法:

Runtime.exec(...)

返回一个对象类型

java.lang.Process

Process 类是抽象的,您返回的是为您的操作系统设计的 Process 的某个子类。例如,在Mac上,它返回具有一个名为的私有字段。使用反射,您可以轻松获取此字段的值。诚然,这是一个黑客攻击,但它可能会有所帮助。你到底需要什么?java.lang.UnixProcesspidPID


推荐