工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Java

Java 9プロセスAPIの改善:ProcessHandleで詳細情報取得

Java 9では、OSプロセスの制御・管理を担当するProcess APIが大幅に改善されました。ProcessHandleクラスで、プロセスのネイティブPID、開始時刻、累積CPU時間、引数、コマンド、ユーザー、親プロセス、子孫プロセスなどの情報を取得できます。また、プロセスの生存確認と破棄のメソッドも提供されます。onExitメソッドにより、CompletableFutureでプロセス終了時の非同期アクション実行が可能です。

Tester.java - プロセス情報取得例

import java.time.ZoneId;
import java.util.stream.Stream;
import java.util.stream.Collectors;
import java.io.IOException;

public class Tester {
    public static void main(String[] args) throws IOException {
        ProcessBuilder pb = new ProcessBuilder("notepad.exe");
        String np = "Not Present";
        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(np));
        System.out.printf("Command line : %s%n", info.commandLine().orElse(np));
        System.out.printf("Start time: %s%n", 
            info.startInstant().map(i -> i.atZone(ZoneId.systemDefault())
            .toLocalDateTime().toString()).orElse(np));
        System.out.printf("Arguments : %s%n", 
            info.arguments().map(a -> Stream.of(a).collect(Collectors.joining(" "))).orElse(np));
        System.out.printf("User : %s%n", info.user().orElse(np));
    }
}

出力例

Process ID : 5800
Command name : C:\Windows\System32\notepad.exe
Command line : Not Present
Start time: 2017-11-04T21:35:03.626
Arguments : Not Present
User: administrator

Java

  1. Java演算子をマスター:種類、構文、実践例
  2. Javaコメント:種類、使い方、ベストプラクティス
  3. Java拡張forループをマスター:構文、例、ベストプラクティス
  4. Java文字列をマスター:生成、メソッド、ベストプラクティス
  5. Javaインターフェース完全ガイド:概念、実装、ベストプラクティス
  6. Java無名インナークラス完全ガイド:定義、構文、実践例
  7. Javaのtry-with-resourcesをマスターする:自動リソース管理の仕組みと活用法
  8. Javaアノテーション完全ガイド:種類、配置場所、実践例
  9. Javaアサーション完全ガイド:バグ早期発見とコード信頼性の向上
  10. Java 9(JDK 9)の主要機能とメリット
  11. Java 9プロセスAPIの改善:ProcessHandleで詳細情報取得