プロセスに関する情報の取得
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>のインスタンスが返されます。戻り値が空かどうか常に確認してください。