fc2ブログ
ホーム   »  Java  »  JavaでプロセスIDを取得

JavaでプロセスIDを取得

プロセスの PID を記録してデーモンの起動と終了を行うといった Unix 系のサーバで一般的に行われている手法を Java VM で行うためなどに VM のプロセス ID が取れたらと何時も思っておりましたが、実際にやろうと思うと JNI を使用して環境ごとのネイティブライブラリを作らなければならなかったりと一々面倒です。

たまたま JMX (Java Management Extensions) を使ってサーバ管理系の MXBean などを作っておりましたところプロセス ID らしきものが目についたのでここにメモしておきます。やり方は簡単、RuntimeMXBean を使用するだけです。

import java.lang.management.*;

RuntimeMXBean rt = ManagementFactory.getRuntimeMXBean();
String name = rt.getName();
if(name.matches("\\d+@.*")){
    pid = Integer.parseInt(name.substring(0, name.indexOf('@')));
} else {
    // 取得できなかった場合
    pid = -1;
}

上記のように RuntimeMXBean#getName()"pid@hostname" という形式の文字列を返しますので解析してプロセス ID を取り出すことができます。もちろん環境依存の挙動であるためすべての実行環境でうまく取得できる保証はありませんが、特定の環境向け開発だとか、ネイティブライブラリを用意するのはこの方法がうまく行かなかった環境だけと割り切るだけでも楽かと思います。

手元で確認できた環境は以下の通り。他にあればコメントなどに残しておいてもらえると助かります。

  • Oracle JDK 1.6.0_26 (CentOS 5.6 final)
  • Oracle JDK 1.6.0_24 (Windows XP)
  • Apple JDK 1.6.0_26 (MacOSX 10.5)
コメント
トラックバック
トラックバック URL
コメントの投稿
管理者にだけ表示を許可する
Profile
Takami Torao
Takami Torao
C/C++ 使いだった 1996年、運命の Java と出会い現在に至る。のらアーキテクト。
Yah, this is image so I don't wanna eat spam, sorry!
Search

Google
MOYO Laboratory
Web

カテゴリー
最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
ブロとも申請フォーム
RSSフィード
リンク