📜  在Java中处理 API 更新

📅  最后修改于: 2022-05-13 01:55:05.543000             🧑  作者: Mango

在Java中处理 API 更新

通过 Process API,我们可以执行任何与流程相关的操作。
假设我们想要当前正在运行的进程的进程id,或者我们想要创建一个新进程,或者想要销毁已经运行的进程,或者想要找到当前正在运行的进程的子进程和父进程,或者我们想要获取任何一个有关流程的信息,然后我们可以使用流程 API 更新。
Java 9 进程 API 更新:-

  • 一些新方法被添加到Java.lang 包中的 Process 类中。
    process 类是 Process API 中的一个旧类,在Java 9 中只添加了一些方法,如 pid()、info() 等。
  • 像 startPipeline() 这样的方法被添加到 ProcessBuilder 类中,该类已经存在于旧Java版本中。
  • ProcessHandle(I):这是Java 9新增的接口,用于处理进程。
  • ProcessHandle.Info(I):它是一个内部接口,它提供了与一个进程相关的所有信息。

进程句柄(I):-

  • 获取当前运行进程的 ProcessHandle 对象:
ProcessHandle ph = ProcessHandle.current();
  • 获取给定进程对象的 ProcessHandle:
ProcessHandle ph = p.toHandle(); //p is a process object
  • 要从给定的进程 ID 获取 ProcessHandle 对象:
Optional obj = ProcessHandle.of(PID);
ProcessHandle ph = obj.get();
  • //获取进程句柄对象
    这里 ProcessHandle 对象的返回类型是可选的,因为该进程可能存在也可能不存在。
    如果进程存在,那么我们将获得它的 ProcessHandle 对象,否则我们将不会获得它的 ProcessHandle 对象。
Java
public class Demo {
 
    public static void main(String[] args)
    {
        ProcessHandle ph = ProcessHandle.current();
        long id = ph.pid();
        System.out.println("Id of the current process is : " + id);
    }
}


Java
public class Demo {
 
    public static void main(String[] args)
    {
        ProcessHandle ph = ProcessHandle.current();
        ProcessHandle.Info pinfo = ph.info();
        System.out.println("Complete process information is :" + pinfo);
        System.out.println("User of the process is : " + pinfo.user().get());
        System.out.println("Command used is : " + pinfo.command().get());
        System.out.println("Time of process starting is : " + pinfo.startInstant().get());
        System.out.println("Total CPU Duration is : " + pinfo.totalCpuDuration().get());
    }
}


Id of the current process is : 5420

ProcessHandle.Info(I):-
Info 是 ProcessHandle 接口内部的一个内部接口。
我们可以获得给定或当前正在运行的进程的完整信息。
创建 ProcessHandle.Info 对象:-
为此,首先我们需要创建 ProcessHandle 对象,然后我们将创建 ProcessHandle.Info 对象。

ProcessHandle ph = ProcessHandle.current();
ProcessHandle.Indo pinfo = ph.info();

ProcessHandle.Info(I) 中的方法:-

  • 用户(): -
    返回当前进程的用户。
Optional o = info.user();
System.out.println("User is : "+o.get());
  • 命令(): -
    返回启动进程的命令。
Optional o = info.command();
System.out.println("Command is : "+o.get());
  • startInstant(): –
    返回当前进程开始的时间。
Optional o = info.startInstant();
System.out.println("Time of process start is : "+o.get());
  • 总CPU持续时间(): -
    返回当前进程的总 CPU 持续时间。
Optional o = info.totalCpuDuration();
System.out.println("Total CPU duration is : "+o.get());

例子: -

Java

public class Demo {
 
    public static void main(String[] args)
    {
        ProcessHandle ph = ProcessHandle.current();
        ProcessHandle.Info pinfo = ph.info();
        System.out.println("Complete process information is :" + pinfo);
        System.out.println("User of the process is : " + pinfo.user().get());
        System.out.println("Command used is : " + pinfo.command().get());
        System.out.println("Time of process starting is : " + pinfo.startInstant().get());
        System.out.println("Total CPU Duration is : " + pinfo.totalCpuDuration().get());
    }
}