Java
 Computer >> コンピューター >  >> プログラミング >> Java

Java 9のProcess APIに追加された新しいメソッドとは?

Java 9におけるProcess APIの強化ポイント

Java 9では、Processクラスに複数の新しいメソッドが追加されるとともに、プロセスの詳細情報を取得するための新しいインターフェースとしてProcessHandleおよびProcessHandle.Infoが導入されました。これにより、OSレベルのプロセス操作や監視が従来よりも格段に扱いやすくなっています。

Java 9でProcessクラスに追加された主なメソッド一覧

  • boolean supportsNormalTermination():destroy()の実装がプロセスを正常に終了させる仕組みであればtrueを返し、そうでなければfalseを返します。
  • long pid():対象プロセスのネイティブなプロセスID(PID)を返します。
  • ProcessHandle toHandle():このProcessオブジェクトに対応するProcessHandleを返します。
  • Stream<ProcessHandle> children():プロセスの直接の子プロセスのスナップショットをStreamとして返します。
  • Stream<ProcessHandle> descendants():プロセスの子孫プロセス全体のスナップショットをStreamとして返します。
  • ProcessHandle.Info info():プロセスに関する情報(コマンド、引数、開始時刻など)のスナップショットを返します。
  • CompletableFuture<Process> onExit():プロセスの終了時に完了するCompletableFutureを返します。非同期処理との組み合わせに便利です。

サンプルコード

以下は、現在実行中のプロセスに対してProcessHandleProcessHandle.Infoを使用して各種情報を取得する例です。

public class ProcessTest {
    public static void main(String args[]) {
        ProcessHandle processHandle = ProcessHandle.current();
        ProcessHandle.Info processInfo = processHandle.info();
        System.out.println(processHandle.pid());
        System.out.println(processHandle.parent());
        System.out.println(processInfo.arguments().isPresent());
        System.out.println(processInfo.command().isPresent());
        System.out.println(processInfo.command().get().contains("tutorialspoint"));
        System.out.println(processInfo.startInstant().isPresent());
    }
}

実行結果

4892
Optional[7788]
false
true
false
true

出力内容の解説

最初の「4892」は現在のプロセスのPID、「Optional[7788]」は親プロセスのハンドルを表しています。「arguments()」はOptional値が空のためfalseとなり、「command()」は存在するためtrueです。コマンド文字列に「tutorialspoint」が含まれていないためfalse、開始時刻は取得できているため最後はtrueとなります。

このようにJava 9のProcess APIを活用することで、プロセスIDの取得や親子関係の確認、起動コマンドや開始時刻といった詳細情報へのアクセスがシンプルなコードで実現できます。

  1. JavaのProcessクラスとは?目的と主なメソッドを実例付きで解説

    概要java.lang.Processクラスは、Objectクラスのサブクラスであり、Runtimeクラスのexec()メソッドによって起動された外部プロセスを表現するためのクラスです。Processオブジェクトを通じて、起動したプロセスの制御や情報の取得を行うことができます。なお、Processクラスは抽象クラスとして定義されているため、直接インスタンス化することはできません。インスタンスは、Runtime.exec()などのメソッドの戻り値として取得します。主なメソッドdestroy(): プロセスを強制終了させるexitValue(): プロセスの終了コードを返すgetErrorStre

  2. JavaのcompareTo()メソッドとcompare()メソッドの違いを徹底解説

    Javaでオブジェクトを並べ替える際に登場するのが、ComparableインターフェースのcompareTo()メソッドと、Comparatorインターフェースのcompare()メソッドです。名前はよく似ていますが、役割や使い方には明確な違いがあります。 Comparableインターフェースが提供するcompareTo()メソッドは、オブジェクトの順序付けを決めるためのもので、この順序は自然順序付け(natural ordering)、このメソッドは自然比較メソッドと呼ばれます。一方、Comparatorインターフェースが提供するcompare()メソッドはソート処理を実行するためのもので、