Trong Java 9, Process API hỗ trợ một cách dễ dàng để có được nhiều thông tin về một quy trình. ProcessHandle giao diện có thể xác định và cung cấp quyền kiểm soát các quy trình và phương pháp gốc để kiểm tra tính hoạt động của các quy trình và phá hủy các quy trình trong khi ProcessHandle.Info giao diện có thể cung cấp ảnh chụp nhanh Thông tin về một quá trình. Chúng tôi cần hủy một quy trình bằng cách sử dụng hủy () phương pháp của ProcessHandle giao diện.
Trong ví dụ dưới đây, chúng tôi cần kết thúc một quy trình bằng cách sử dụng ProcessHandle giao diện.
Ví dụ
import java.io.File; import java.io.IOException; import java.util.Objects; public class DestroyProcessTest { public static void main(String[] args) throws InterruptedException { System.out.println("---------------------------"); System.out.println("Destroy Process:"); final String javaCmd = getJavaCmdFromParent(); final String classpath = getClassPathFromParent(); try { final Process process = new ProcessBuilder(javaCmd, "-cp", classpath, DestroyProcessTest.class.getName()).start(); ProcessHandle processHandle = process.toHandle(); printInfo(processHandle); destroyProcess(processHandle); Thread.sleep(1000); System.out.println("---------------------------"); System.out.println("After destroying the process:"); printInfo(processHandle); } catch(IOException e) { e.printStackTrace(); } } private static String getClassPathFromParent() { return System.getProperty("java.class.path", "./*"); } private static String getJavaCmdFromParent() { return Objects.isNull(System.getProperty("java.home")) ? "java" : String.format("%s%sbin%sjava", System.getProperty("java.home"), File.separator, File.separator); } private static void destroyProcess(ProcessHandle processHandle) throws IllegalStateException { System.out.println("Ready to destroy Process with id: " + processHandle.pid()); processHandle.destroy(); } private static void printInfo(ProcessHandle processHandle) { System.out.println("---------"); System.out.println("Id: " + processHandle.pid()); System.out.println("isAlive(): " + processHandle.isAlive()); System.out.println("isSupportsNormalTermination(): " + processHandle.supportsNormalTermination()); ProcessHandle.Info processInfo = processHandle.info(); System.out.println("Info: " + processInfo.toString()); System.out.println("Info arguments().isPresent(): " + processInfo.arguments().isPresent()); System.out.println("Info command().isPresent(): " + processInfo.command().isPresent()); System.out.println("Info totalCpuDuration().isPresent(): " + processInfo.totalCpuDuration().isPresent()); System.out.println("Info user().isPresent(): " + processInfo.user().isPresent()); } }
Đầu ra
--------------------------- Destroy Process: --------- Id: 4384 isAlive(): true isSupportsNormalTermination(): false Info: [user: Optional[Tutorialspoint\User], cmd: C:\Program Files\Java\jdk-9.0.4\bin\java.exe, startTime: Optional[2020-03-06T10:58:53.210Z], totalTime: Optional[PT0.046875S]] Info arguments().isPresent(): false Info command().isPresent(): true Info totalCpuDuration().isPresent(): true Info user().isPresent(): true Ready to destroy Process with id: 4384 --------------------------- After destroying the process: --------- Id: 4384 isAlive(): false isSupportsNormalTermination(): false Info: [user: Optional[Tutorialspoint\User], startTime: Optional[2020-03-06T10:58:53.210Z], totalTime: Optional[PT0.109375S]] Info arguments().isPresent(): false Info command().isPresent(): false Info totalCpuDuration().isPresent(): true Info user().isPresent(): true