从已知 PID 重新创建 Java 个进程对象

Recreate Java Process Object from known PID

我有一个程序(某种进程监视器)可以使用 ProcessBuilder 启动多个程序。当我启动这个 ProcessBuilder(针对每个程序)时,我可以启动它,它会给我一个 Process 对象。有了内存中的 Process 对象,我什至可以使用 destroy() 或 destroyForcibly() 停止我的程序。

现在,如果我的主程序 (Process Monitor) 崩溃,我重新启动它,假设我有一个我启动的每个程序的 PID,我怎么能用这个 PID 重新创建一个 Process 对象?我没有在 Process class 或 ProcessBuilder 中看到该选项(尽管我猜我们需要 ProcessLoader 而不是 Builder)。

有什么办法吗?

为了说明我想要什么:

long pid = getPid();
Process process = new Process(pid);
//or
Process process = new Process();
process.load(pid);

所以,如果有人需要像我这样的东西,他实际上可以使用 ProcessHandle

https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/ProcessHandle.html

long pid = getPid();
ProcessHandle process;
Optional<ProcessHandle> possibleProcess = ProcessHandle.of(pid);
if(possibleProcess.isPresent()) process = possibleProcess.get();

你得到一个 Stream,你可以根据需要进一步收集或操作,并且 ProcessHandle 处理与 Process 相同的一组操作(onExit()、destroy()、destroyForcibly() 等)