Heim > Java > javaLernprogramm > Wie kann ich einen Prozess mithilfe der Prozess-API in Java 9 beenden/zerstören?

Wie kann ich einen Prozess mithilfe der Prozess-API in Java 9 beenden/zerstören?

王林
Freigeben: 2023-09-11 15:37:02
nach vorne
879 Leute haben es durchsucht

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

In Java 9 unterstützt die Prozess-API eine einfache Möglichkeit, umfangreiche Informationen über einen Prozess zu erhalten. Die ProcessHandleSchnittstelle kann native Prozesse und Methoden identifizieren und steuern, um Prozessaktivitäten zu überprüfen und Prozesse zu zerstören, während die ProcessHandle.InfoSchnittstelle eine Informationsmomentaufnahme eines Prozesses bereitstellen kann. Wir müssen die Methode destroy() der Schnittstelle ProcessHandle verwenden, um den Prozess zu zerstören.

Im folgenden Beispiel müssen wir die Schnittstelle „ProcessHandle“ verwenden, um den Prozess zu beenden. Beispiel

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>);
   }
}
Nach dem Login kopieren

Ausgabe

<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>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich einen Prozess mithilfe der Prozess-API in Java 9 beenden/zerstören?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage