根据已知PID重新创建Java进程对象



我有一个程序(某种类型的Process Monitor(,它可以用ProcessBuilder启动多个程序。当我启动这个ProcessBuilder(对于每个程序(时,我可以启动它,它会给我一个Process对象。在内存中有了这个Process对象,我甚至可以用destroy((或destroyForcebly((停止我的程序。

现在,如果我的主程序(进程监视器(崩溃,我重新启动它,并且假设我有一个启动的每个程序的PID,我如何用这个PID重新创建进程对象?我在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((和destroyForcebly((等(

相关内容

  • 没有找到相关文章

最新更新