LinuxおよびSolarisでJavaを使用して実行中のすべてのプロセスのリストを取得する方法を知っている人はいますか?psのような外部プログラムを使いたくないし、procも使いたくない。ネイティブコールでやりたいです。JNAを使用してWindowsの方法を見つけました。しかし、その方法はLinuxとSolarisでは機能しません。
6 に答える
Java は、このための API を提供していません。
あなたができることは、の結果を解析することですProcess p = Runtime.getRuntime().exec("ps");
Linuxpsと Solarisはどちらも、ps最終的にはそれぞれの OS の /proc 実装を使用します。直接的または間接的に /proc を使用せざるを得ません。
シガーを見てください:
http://support.hyperic.com/display/SIGAR/Home
Sigar を使用すると、探していること (およびそれ以上) を行うことができ、JNI バインディングがあります。
もちろん、いつでも の実装を見てps、同じことを実行できJNIますが、プラットフォームごとに個別に実行する必要があります。
ps を使用します。システムに ps コマンドを実行させたくないが、代わりに JNI を使用する場合は、Linux および OpenSolaris 用の ps ソース コードのコピーを入手してください。次に、JNI を使用して ps ソース コードで使用されるシステム コールを実行する Java コードを記述します。これらは同じではないため、異なる OS の低レベルの詳細を考慮する必要があることに注意してください。
この考え方が気に入らない場合は、ps コマンドで表される移植可能な API に戻るのがおそらく最も賢明です。