Home > Java > javaTutorial > body text

How to kill/destroy process using Process API in Java 9?

王林
Release: 2023-09-11 15:37:02
forward
847 people have browsed it

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

In Java 9, the Process API supports a simple way to get a lot of information about a process. The ProcessHandle interface can identify and provide control of the native process and methods of checking process activity and destroying the process, while the ProcessHandle.Info interface can provide an information snapshot of the process. We need to use the destroy() method of the ProcessHandle interface to destroy the process.

In the following example, we need to use the ProcessHandle interface to terminate the process.

Example

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>);
   }
}
Copy after login

Output

<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>
Copy after login

The above is the detailed content of How to kill/destroy process using Process API in Java 9?. For more information, please follow other related articles on the PHP Chinese website!

source:tutorialspoint.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template