Computer >> Máy Tính >  >> Lập trình >> Java

Làm thế nào để in pid, thông tin, con và hủy các quy trình trong JShell trong Java 9?

JShell là một công cụ Java Shell được sử dụng để thực thi các câu lệnh java đơn giản như lớp, phương thức, giao diện, enums, và v.v .. đánh giá nó và in kết quả trong dòng lệnh nhắc nhở.

Java đã cải thiện API quy trình để quản lý và kiểm soát các quy trình của hệ điều hành. ProcessHandle giao diện xác định và cung cấp quyền kiểm soát các quy trình gốc, các phương pháp để kiểm tra quy trình sự sống phá hủy quy trình . ProcessHandle.Info giao diện cung cấp thông tin ảnh chụp nhanh của một quy trình.

Trong đoạn mã dưới đây, chúng tôi có thể in pid , thông tin , trẻ em , phá hủy các quy trình của Quy trình API .in JShell công cụ.

Đ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)