Javaの9+と不正アクセスの警告なしにプロセスからPIDを取得する方法は?

オリビエ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#pidJava9で導入し、そのサンプルは、として次のようになります。

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

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=136760&siteId=1