By Process API, we can perform any operation related to a process.
Suppose if we want the process id of current running process, or we want to create a new process, or want to destroy already running process, or want to find the child and parent processes of current running process, or if we want to get any information regarding a process, then we can use Process API updates.
Java 9 Process API Updates: –
- Some new methods are added to the Process class present in java.lang package.
The process class is an old class in Process API, only some methods like, pid(), info() etc are added in java 9. - Methods like startPipeline() are added to ProcessBuilder class which is already present in old java versions.
- ProcessHandle(I) : This is a new interface added in java 9. It is used to handle a process.
- ProcessHandle.Info(I): It is an inner interface, it provides all the information related to a process.
ProcessHandle(I): –
- To get ProcessHandle object of current running process:
ProcessHandle ph = ProcessHandle.current();
- To get ProcessHandle of the given process object:
ProcessHandle ph = p.toHandle(); //p is a process object
- To get ProcessHandle object from a given process ID:
Optional obj = ProcessHandle.of(PID); ProcessHandle ph = obj.get();
- //getting process handle object
Here the return type of ProcessHandle object is optional because the process may or may not exist.
If the process exist then we will get its ProcessHandle object otherwise we won’t get its ProcessHandle object.
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); } } |
Id of the current process is : 5420
ProcessHandle.Info(I): –
Info is an inner interface present inside ProcessHandle interface.
We can get complete information of the given or current running process.
To create ProcessHandle.Info object: –
For this, first we need to create ProcessHandle object and then we will create ProcessHandle.Info object.
ProcessHandle ph = ProcessHandle.current(); ProcessHandle.Indo pinfo = ph.info();
Methods in ProcessHandle.Info(I): –
- user(): –
returns the user of the current process.
Optional o = info.user(); System.out.println("User is : "+o.get());
- command(): –
returns the command by which the process is started.
Optional o = info.command(); System.out.println("Command is : "+o.get());
- startInstant(): –
returns the time at which the current process started.
Optional o = info.startInstant(); System.out.println("Time of process start is : "+o.get());
- totalCpuDuration(): –
returns the total CPU duration of the current process.
Optional o = info.totalCpuDuration(); System.out.println("Total CPU duration is : "+o.get());
Example: –
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()); } } |