- およよ
- 会議室デビュー日: 2004/04/03
- 投稿数: 9
|
投稿日時: 2005-11-08 19:43
現在、開発中のJavaプログラムでプロセスIDの取得方法について悩んでいます。
取得したいプロセスIDは取得するプログラム自身のプロセスIDです。
既存プロジェクトのJavaプログラムではnativeメソッドを使ってプロセスIDを取得しているので、その流用も考えたのですが、nativeメソッドを使わずにJavaプログラムのみでプロセスIDを取得する方法がないか模索しているところです。
プログラムはSolaris上とWindows上のどちらでも動くことが前提となっています。
何か良い方法がありましたらご教示願えますでしょうか。
宜しくお願いします。
(備考)
ネイティブコードはC++で、<unistd.h>includeのgetpid()で取得しています。
|
- かつのり
- ぬし
- 会議室デビュー日: 2004/03/18
- 投稿数: 2015
- お住まい・勤務地: 札幌
|
投稿日時: 2005-11-08 22:02
JavaにはプロセスIDの取得のような、環境に依存する機能は備わっていません。
nativeメソッドをそのまま利用するパターンが良いと思います。
Win32/Solaris用にそれぞれnativeコードを用意して、
以下のコードのように実装すれば、
利用者側は同じコードで実行可能です。
擬似コードですが、
コード: |
|
//プロセス情報取得クラス
public abstract class ProcessInfo{
public abstract int getProcessId();
private static ProcessInfo info;
public static ProcessInfo getProcessInfo(){
java.lang.SystemクラスでOS判定;
if(info == null){
if(Win32){
info = new Win32ProcessInfo();
}else if(Solaris){
info = new SolarisProcessInfo();
}else{
info = new XXXXXXProcessInfo();
}
}
return info
}
}
class Win32ProcessInfo extends ProcessInfo{
public int getProcessId(){
return getProcessId0();
}
private native int getProcessId0();
}
class SolarisProcessInfo extends ProcessInfo{
public int getProcessId(){
return getProcessId0();
}
private native int getProcessId0();
}
//利用側
public class Main{
public static void main(String[] args){
ProcessInfo info = ProcessInfo.getProcessInfo();
int id = info.getProcessId();
}
}
|
|
- 未記入
- ぬし
- 会議室デビュー日: 2004/09/17
- 投稿数: 667
|
投稿日時: 2005-11-09 01:08
引用: |
| nativeメソッドをそのまま利用するパターンが良いと思います。
|
JNI を使うのであれば、Java のソースコードで OS の判定・分岐は必要ないのでは?
コード: |
| System.loadLibrary("pid");
...
private native int getProcessId0();
|
あとは OS にあわせて、pid.dll や libpid.so などを用意すればいい。
|
- かつのり
- ぬし
- 会議室デビュー日: 2004/03/18
- 投稿数: 2015
- お住まい・勤務地: 札幌
|
投稿日時: 2005-11-09 01:29
なるほど、ライブラリ名が同じなら分岐やサブクラス化は不要ですね。
|
- およよ
- 会議室デビュー日: 2004/04/03
- 投稿数: 9
|
投稿日時: 2005-11-09 01:34
そうですかぁ、やはりその方法が良いのですね。
nativeメソッドで実装することにしてみます。
ありがとうございます!
|