プロセスに関する情報の取得

Process.pidメソッドによってプロセスのネイティブ・プロセスIDが返されます。Process.infoメソッドによって、プロセスに関する追加の情報(実行可能ファイルのパス名、開始時間、ユーザーなど)が含まれるProcessHandle.Infoインスタンスが返されます。

次の引用では、getInfoTestメソッドによってプロセスが起動され、次にプロセスに関する情報が出力されます。

    public static void getInfoTest() throws IOException {
        ProcessBuilder pb = new ProcessBuilder("echo", "Hello World!");
        String na = "<not available>";
        Process p = pb.start();
        ProcessHandle.Info info = p.info();
        System.out.printf("Process ID: %s%n", p.pid());
        System.out.printf("Command name: %s%n", info.command().orElse(na));
        System.out.printf("Command line: %s%n", info.commandLine().orElse(na));

        System.out.printf("Start time: %s%n",
            info.startInstant().map((Instant i) -> i
                .atZone(ZoneId.systemDefault()).toLocalDateTime().toString())
                .orElse(na));

        System.out.printf("Arguments: %s%n",
            info.arguments().map(
                (String[] a) -> Stream.of(a).collect(Collectors.joining(" ")))
                .orElse(na));

        System.out.printf("User: %s%n", info.user().orElse(na));
    }

このメソッドによって、次のような出力が表示されます。

Process ID: 18761
Command name: /usr/bin/echo
Command line: echo Hello World!
Start time: 2017-05-30T18:52:15.577
Arguments: <not available>
User: administrator

ノート:

  • プロセスの属性はオペレーティング・システムによって異なり、すべての実装で使用できるわけではありません。また、プロセスに関する情報は、リクエストを作成したプロセスのオペレーティング・システム権限によって制限されます。

  • ProcessHandle.Infoインタフェースのすべてのメソッドでは、Optional<T>のインスタンスが返されます。戻り値が空かどうか常に確認してください。