Java 9のProcess APIで親プロセスを取得する方法
ProcessHandleインターフェースを使用すると、プロセスに対してさまざまな操作を実行したり、プロセスの状態を確認したりできます。このインターフェースは、プロセスのネイティブなPID、開始時刻、CPU時間、ユーザー、親プロセス、子孫プロセスなどの情報へのアクセス手段を提供します。
親プロセスにアクセスするには、parent()メソッドを呼び出します。戻り値はOptional<ProcessHandle>型であり、子プロセスに親が存在しない場合や、親プロセスの情報が取得できない場合には空(empty)のOptionalが返されます。
構文
Optional<ProcessHandle> parent()サンプルコード
import java.io.*;
public class ParentProcessTest {
public static void main(String args[]) {
try {
Process notepadProcess = new ProcessBuilder("notepad.exe").start();
ProcessHandle parentHandle = notepadProcess.toHandle().parent().get();
System.out.println("Parent Process Native PID: " + parentHandle.pid());
} catch(IOException e) {
e.printStackTrace();
}
}
}コードのポイント
- ProcessBuilderを使って「notepad.exe」アプリケーションを起動し、そのProcessオブジェクトを取得しています。
- toHandle()メソッドでProcessオブジェクトからProcessHandleインスタンスへ変換します。
- parent().get()により親プロセスのハンドルを取り出し、pid()メソッドで親プロセスのネイティブPIDを出力します。
上記の例では、「notepad」アプリケーションが起動され、同時にその親プロセスのネイティブPIDがコンソールに出力されます。
実行結果
Parent Process Native PID : 7108このように、Java 9で導入されたProcess APIを活用することで、外部プロセスだけでなく、その親プロセスに関する情報も簡単に取得できるようになりました。OSレベルのプロセス管理が必要なアプリケーション開発において非常に便利な機能です。
-
Javaでフォルダ内のディレクトリ(フォルダ)のみを取得する方法
Javaで特定のフォルダに含まれるファイルではなく、ディレクトリ(サブフォルダ)だけを取得したいケースはよくあります。本記事では、代表的な2つの方法——FileFilterインターフェースを使う方法と、NIOのFiles.walk()を使う方法——をサンプルコード付きで解説します。listFiles()メソッドとFileFilterの基本FileクラスのlistFiles()メソッドは、そのFileオブジェクトが表すパスに含まれるすべてのファイルおよびディレクトリの抽象パス名を、配列として返します。ここで活躍するのがFileFilterインターフェースです。FileFilterはパス名をフィル
-
Javaでディレクトリ内のjpgファイル一覧を取得する方法
FilenameFilterインターフェースを使った方法Fileクラスのlist(FilenameFilter filter)メソッドは、現在のFileオブジェクトが表すパスに存在するすべてのファイルおよびディレクトリの名前をString配列として返します。ただし、返される配列には、指定したフィルター条件を満たすファイル名のみが含まれます。FilenameFilterは、次の単一のメソッドを持つJavaのインターフェースです。accept(File dir, String name)拡張子に基づいてファイル名を取得したい場合は、このインターフェースを実装したクラスを作成し、そのインスタンスをF