从已知的PID重新创建Java Process Object

问题描述

我有一个程序(某种类型的过程监视器),它使用ProcessBuilder启动多个程序。当启动此ProcessBuilder(针对每个程序)时,可以启动它,并且它将给我一个Process对象。有了这个Process对象,我什至可以用destroy()或destroyForcably()停止程序。

现在,如果我的主程序(进程监视器)崩溃了,然后我重新启动了它,并且还说我有我启动的每个程序的PID,那么如何用此PID重新创建Process对象?我没有在Process类或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(),destroyForcably()等)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...