
在 Java 9 中,Process API 支持一种简单的方法来获取有关进程的大量信息。 ProcessHandle接口可以识别并提供对本机进程的控制以及检查进程活动性和销毁进程的方法,而ProcessHandle.Info接口可以提供进程的信息快照。我们需要使用ProcessHandle接口的destroy()方法来销毁进程。
在下面的示例中,我们需要使用ProcessHandle接口终止进程。
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>
以上就是如何在 Java 9 中使用 Process API 终止/销毁进程?的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号