- PR -

JavaでのプロセスID取得について

1
投稿者投稿内容
およよ
会議室デビュー日: 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メソッドで実装することにしてみます。
ありがとうございます!
1

スキルアップ/キャリアアップ(JOB@IT)