オリビエGérardin:
私は開始プロセスのための基礎となるOS PIDを取得する必要があります。私が使用しているソリューションは、今、このようなコードを使用してリフレクションを通じてプライベートフィールドへのアクセスが含まれます。
private long getLongField(Object target, String fieldName) throws NoSuchFieldException, IllegalAccessException {
Field field = target.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
long value = field.getLong(target);
field.setAccessible(false);
return value;
}
それは動作しますが、いくつかの問題は、このアプローチであり、あなたはあなたがする必要があるので、Windows固有のプロセスのサブクラスが(「PID」フィールドが、「ハンドル」フィールドが格納されていないため、Windows上で余分な作業を行う必要があることを一つであります実際のPIDを取得するにはJNAのビット)、およびJava 9で始まる、それは「WARNING:違法反射アクセス動作が発生しました」のような恐ろしい警告の束をトリガーすることを別のビーイング。
質問はそう:PIDを取得する(Javaの将来のリリースで壊さないgaranteedきれいで、OSに依存しない、)より良い方法はありますか?この最初の場所でのJavaによって公開すべきではありませんか?
また:
あなたが使用することができますProcess#pid
Java9で導入し、そのサンプルは、として次のようになります。
ProcessBuilder pb = new ProcessBuilder("echo", "Hello World!");
Process p = pb.start();
System.out.printf("Process ID: %s%n", p.pid());
この方法のドキュメントは読み取ります。
* Returns the native process ID of the process.
* The native process ID is an identification number that the operating
* system assigns to the process.
そして注目すべきにも同じから
* @throws UnsupportedOperationException if the Process implementation
* does not support this operation