細かいネタです。
実行している JVM のプロセスIDを取るには RuntimeMXBean 使うと簡単に取れます。
RuntimeMXBean bean = ManagementFactory.getRuntimeMXBean(); String vmName = bean.getName(); long pid = Long.valueOf(vmName.split("@")[0]); System.out.println("VM Name : " + vmName); System.out.println("PID : " + pid);
実行結果はこんな感じ
VM Name : 9588@hostname PID : 9588
RuntimeMXBean.getName() は、pid@hostname という名前を返すので、頭を抜き出せばプロセスIDが取得できます。
Sun の API では、
実行している Java 仮想マシンを表す名前を返します。返される名前は任意の文字列とすることができます。 また、Java 仮想マシンの実装では、返された名前文字列にプラットフォーム固有の役に立つ情報を組み込むように選択できます。実行している各仮想マシンには、異なる名前を付けることができます。
のように定義されているので、JVM の実装によっては上手く取れない場合があるかもしれません。
ついでにプロセスIDは、
JVM の起動時に、環境変数 TMP または TEMP で指定されたディレクトリに hsperfdata_[username] というディレクトリが作成され、その中に、上記の例であれば「10164」という名前のPIDファイルを作成されます。JVM が終了するとこのファイルは削除されます。
Windows の例だと、「C:\Documents and Settings\username\Local Settings\Temp\hsperfdata_username」ディレクトリが該当します。
java5 で追加されたコマンドラインツールの「jps」は、このPIDファイルを元に情報を表示しています。
タスクマネージャで見たければ「列の選択...」でPIDを出せば見れますし、*nix の場合は普通に ps で見れますが、「jps -vl」だと詳細な情報が見れて吉。