Java の ProcessBuilder で実行した FFmpeg の Process ID (PID) を取得する件.

スポンサーリンク

OS X, Linux の場合です.

例えば,

String[] cmdArray = {"ffmpeg", "-i", "mokyu.mov", "mokyu.mp4"};
ProcessBuilder pb = new ProcessBuilder(cmdArray);
    try {
        Process pr = pb.start();
        InputStream is = pr.getErrorStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);

        long pid = -1;
        try {
            if (pr.getClass().getName().equals("java.lang.UNIXProcess")) {
                Field field = pr.getClass().getDeclaredField("pid");
                field.setAccessible(true);
                pid = field.getLong(pr);
                field.setAccessible(false);
            }
        } catch (Exception e) {
            //
        }
...

参考

How to get PID of process I’ve just started within java program?
http://stackoverflow.com/questions/4750470/how-to-get-pid-of-process-ive-just-started-within-java-program

なお,Java 9 ではプロセス ID を取得するための API が用意されるようです.

How can a Java program get its own process ID?
http://stackoverflow.com/questions/35842/how-can-a-java-program-get-its-own-process-id

Java
スポンサーリンク
コピペワールド