在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());
}
}