オブジェクトの説明からUnixプロセスpidを見つける必要がある状況に遭遇しました。
例:-新しいプロセスを作成するJavaコードからunixで実行されるスクリプトがあります。
これをJavaコードから出力すると、次のようになります。
java.lang.UNIXProcess@87cbde
上記から、オブジェクトがUNIXProcessを参照していることは明らかです。
このオブジェクト記述の助けを借りて、UNIXでこのプロセスのPIDを見つけることは可能ですか?
オブジェクトの説明からUnixプロセスpidを見つける必要がある状況に遭遇しました。
例:-新しいプロセスを作成するJavaコードからunixで実行されるスクリプトがあります。
これをJavaコードから出力すると、次のようになります。
java.lang.UNIXProcess@87cbde
上記から、オブジェクトがUNIXProcessを参照していることは明らかです。
このオブジェクト記述の助けを借りて、UNIXでこのプロセスのPIDを見つけることは可能ですか?
このオブジェクトの説明を使用して、UNIX でこのプロセスの PID を見つけることは可能ですか?
簡単な答えはノーです。方法はありません。
まず、その「記述子」は、単に のデフォルト実装の出力ですtoString()
。これは、オブジェクトのクラス名とその「ID ハッシュ コード」で構成されます。オブジェクトの状態をエンコードしません。
ID ハッシュコードは、通常、メソッドが最初に呼び出されたときにオブジェクトのアドレスに基づいて計算される値です。でも:
これは 32 ビット (最大) の値であり、64 ビット JVM で完全な 64 ビット アドレスをエンコードすることはできません。
オブジェクトは、ID ハッシュコードが計算されたときと同じアドレスに存在しなくなる可能性があります。
純粋な Java では、マシン アドレスを Java 参照に (またはその逆に) 変換することはできません。(また、pure Java 以外のトリックを使用しても、間違えると JVM の安定性の問題が発生する可能性があります。)
ただし、オブジェクトのオブジェクト参照がある場合は、UnixProcess
リフレクションを使用してそのプライベート フィールドを調べ、UNIX pid 値を掘り出すことができるはずです。