モダンなProcess API
ProcessHandleを使ってOSプロセスを検査・管理する。
コード比較
✕ Java 8
Process p = Runtime.getRuntime()
.exec("ls -la");
int code = p.waitFor();
// no way to get PID
// no easy process info
✓ Java 9+
ProcessHandle ph =
ProcessHandle.current();
long pid = ph.pid();
ph.info().command()
.ifPresent(IO::println);
ph.children().forEach(
c -> IO.println(c.pid()));
このコードに問題がありますか? お知らせください。
モダンな方法が優れている理由
完全な情報
PID、コマンド、引数、開始時刻、CPU使用率にアクセスできます。
プロセスツリー
親、子、子孫プロセスをナビゲートできます。
モニタリング
onExit()は非同期モニタリング用のCompletableFutureを返します。
旧来のアプローチ
Runtime.exec()
モダンなアプローチ
ProcessHandle
JDKバージョン
9
難易度
中級
JDKサポート
モダンなProcess API
利用可能
JDK 9(2017年9月)以降、広く利用可能
仕組み
ProcessHandleはPID、プロセス情報(コマンド、引数、開始時刻、CPU使用率)、親子関係、プロセスの終了機能を提供します。undocumentedなProcessの内部機構は不要になります。
関連ドキュメント