Maison > Java > javaDidacticiel > Comment tuer/détruire un processus à l'aide de l'API Process dans Java 9 ?

Comment tuer/détruire un processus à l'aide de l'API Process dans Java 9 ?

王林
Libérer: 2023-09-11 15:37:02
avant
878 Les gens l'ont consulté

如何在 Java 9 中使用 Process API 终止/销毁进程?

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.

Exemple

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>);
   }
}
Copier après la connexion

Sortie

<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>
Copier après la connexion

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!

source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal