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でプロセスAPIを使用してプロセスを強制終了/破棄するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。