0

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

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

有没有办法做到这一点?

为了说明我想要的:

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

1 回答 1

1

所以,如果有人需要像我这样的东西,他实际上可以使用 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() 等)

于 2020-10-22T13:15:41.200 回答