読者です 読者をやめる 読者になる 読者になる

自身のJVMのプロセスIDを取得するには

Java

細かいネタです。
実行している 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」だと詳細な情報が見れて吉。