Java : ProcessHandle.Info (外部プロセス情報) - API使用例
ProcessHandle.Info (Java SE 19 & JDK 19) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。
概要
ProcessHandle.Info インタフェースは、Process や ProcessHandle オブジェクトから取得できます。
そして ProcessHandle.Info からは、
- 外部プロセスを実行したユーザ
- 使用したCPU時間
といったプロセスに関する情報にアクセスできます。
public class Main {
public static void main(String[] args) {
final var handle = ProcessHandle.current();
final var info = handle.info();
System.out.println("user = " + info.user());
System.out.println("total cpu time = " + info.totalCpuDuration());
}
}
// 結果
// ↓
//> java Main
//user = Optional[MY-PC\xxxx]
//total cpu time = Optional[PT0.09375S]
メソッド
Optional<String[]> arguments ()
※Linux で実行した結果です。
public class Main {
public static void main(String[] args) {
System.out.println("args : " + Arrays.toString(args));
final var handle = ProcessHandle.current();
final var info = handle.info();
info.command().ifPresent(command -> {
System.out.println("command = " + command);
});
info.commandLine().ifPresent(commandLine -> {
System.out.println("commandLine = " + commandLine);
});
info.arguments().ifPresent(arguments -> {
System.out.println("arguments = " + Arrays.toString(arguments));
});
}
}
// 結果
// ↓
//$ java Main aaa bbb
//args : [aaa, bbb]
//command = /home/xxxx/openjdk/jdk-19.0.2/bin/java
//commandLine = /home/xxxx/openjdk/jdk-19.0.2/bin/java Main aaa bbb
//arguments = [Main, aaa, bbb]
Optional<String> command ()
このメソッドの使用例は、arguments() にまとめて記載しました。
そちらのAPI使用例をご参照ください。
Optional<String> commandLine ()
このメソッドの使用例は、arguments() にまとめて記載しました。
そちらのAPI使用例をご参照ください。
Optional<Instant> startInstant ()
public class Main {
public static void main(String[] args) {
System.out.println("current time : " + Instant.now());
// 約15秒 CPU時間を使います。
final var start = System.nanoTime();
while (true) {
if (System.nanoTime() - start >= 1000000000L * 15) {
break;
}
}
final var handle = ProcessHandle.current();
final var info = handle.info();
info.startInstant().ifPresent(instant -> {
System.out.println("start instant = " + instant);
});
info.totalCpuDuration().ifPresent(duration -> {
System.out.println("total cpu time = " + duration);
});
}
}
// 結果
// ↓
//> java Main
//current time : 2023-03-25T07:52:44.806974500Z
//start instant = 2023-03-25T07:52:44.727Z
//total cpu time = PT14.828125S
Optional<Duration> totalCpuDuration ()
このメソッドの使用例は、startInstant() にまとめて記載しました。
そちらのAPI使用例をご参照ください。
Optional<String> user ()
public class Main {
public static void main(String[] args) {
final var handle = ProcessHandle.current();
final var info = handle.info();
info.user().ifPresent(user -> {
System.out.println("user = " + user);
});
}
}
// 結果
// ↓
//> java Main
//user = MY-PC\xxxx