Dans Java 9, l'API Processus prend en charge un moyen simple d'obtenir des informations détaillées sur un processus. L'interface ProcessHandle peut identifier et fournir un contrôle sur les processus et méthodes natifs pour vérifier l'activité des processus et détruire les processus, tandis que l'interface ProcessHandle.Info peut fournir un instantané des informations d'un processus. Nous devons utiliser la méthode destroy() de l'interface ProcessHandle pour détruire le processus.
Dans l'exemple ci-dessous, nous devons utiliser l'interface ProcessHandle pour terminer le processus.
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 <strong>Process </strong>process = new <strong>ProcessBuilder</strong>(javaCmd, "-cp", classpath, <strong>DestroyProcessTest.class.getName()</strong>).start(); ProcessHandle processHandle = process.<strong>toHandle()</strong>; 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.<strong>destroy()</strong>; } private static void printInfo(ProcessHandle processHandle) { System.out.println("---------"); System.out.println("Id: " +<strong> </strong>processHandle<strong>.pid()</strong>); System.out.println("isAlive(): " +<strong> </strong>processHandle<strong>.isAlive()</strong>); System.out.println("isSupportsNormalTermination(): " + processHandle.<strong>supportsNormalTermination()</strong>); <strong>ProcessHandle.Info</strong> processInfo = <strong>processHandle.info()</strong>; System.out.println("Info: " + processInfo<strong>.toString()</strong>); System.out.println("Info arguments().isPresent(): " + processInfo<strong>.</strong><strong>arguments()</strong><strong>.isPresent()</strong>); System.out.println("Info command().isPresent(): " + <strong>processInfo.command().isPresent()</strong>); System.out.println("Info totalCpuDuration().isPresent(): " + processInfo.<strong>totalCpuDuration().isPresent()</strong>); System.out.println("Info user().isPresent(): " + processInfo.<strong>user().isPresent()</strong>); } }
<strong>--------------------------- 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</strong>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!