JShell là công cụ Java Shell dùng để thực thi các câu lệnh Java đơn giản như class, method, interface, enum… đánh giá và in kết quả tại dấu nhắc command-line.
Java 9 cải tiến Process API để quản lý và kiểm soát tiến trình hệ điều hành. Interface ProcessHandle xác định và cung cấp quyền kiểm soát tiến trình native, phương thức kiểm tra sự sống và hủy tiến trình. Interface ProcessHandle.Info cung cấp ảnh chụp thông tin của một tiến trình.
Trong đoạn mã dưới đây, ta có thể in pid, info, children và destroy tiến trình của Process API trong công cụ JShell.
Đoạn mã
jshell> ProcessHandle currentProcess = ProcessHandle.current();
currentProcess ==> 3960
jshell> System.out.println("Current Process Id: = " + currentProcess.pid());
Current Process Id: = 3960
jshell> currentProcess.info();
$3 ==> [user: Optional[Tutorialspoint\User], cmd: C:\Program Files\Java\jdk-9.0.4\bin\java.exe, startTime: Optional[2020-05-03T06:43:37.510Z], totalTime: Optional[PT1.265625S]]
jshell> currentProcess.pid();
$4 ==> 3960
jshell> ProcessHandle.of(3960)
$5 ==> Optional[3960]
jshell> $5.get()
$6 ==> 3960
jshell> $6.info()
$7 ==> [user: Optional[Tutorialspoint\User], cmd: C:\Program Files\Java\jdk-9.0.4\bin\java.exe, startTime: Optional[2020-05-03T06:43:37.510Z], totalTime: Optional[PT1.390625S]]
jshell> Stream<ProcessHandle> childProc = ProcessHandle.current().children();
childProc ==> java.util.stream.ReferencePipeline$2@6895a785
jshell> childProc.count()
$10 ==> 1
jshell> childProc.forEach(procHandle -> {
System.out.println(procHandle.destroy() ? "Could not kill process " + procHandle.pid() : "Terminated " + procHandle.pid());
});
| java.lang.IllegalStateException thrown: stream has already been operated upon or closed
| at AbstractPipeline.evaluate (AbstractPipeline.java:229)
| at ReferencePipeline.forEach (ReferencePipeline.java:430)
| at (#11:1)