web-dev-qa-db-ja.com

Javaプログラムのプロセス名を設定するにはどうすればよいですか?

Javaプログラムが開始されると、システムプロセスモニターにJavaという名前が付けられます。多くのJavaプログラムは、そのように区別するのが難しいため、方法が存在する場合は素晴らしいでしょう。プロセスモニターに表示される名前を設定するには、これはオペレーティングシステムによって異なる場合があることを認識しています。

Javaインタープリターが次のように名前を設定するスイッチをサポートする場合、簡単な方法になります。

Java -processname MyProgram -jar MyProgram

しかし、私はそのようなスイッチを見つけることができなかったので、おそらく存在しないでしょう。プロセス名を設定するJavaのAPIも問題ありません。

だから、あなたは何か提案がありますか?

59
Mnementh

これが可能かどうかはわかりませんが、「jps」というJDKに付属のコマンドラインツールを使用できます。 * nix psに似ていますが、ただJavaプログラム。代わりにjps -vは、Javaに渡したすべての引数を表示します。

また、私は人々が彼らのJavaプロセスに未使用の-Dmyprocessnameを引数に。

47
omerkudat

@omerkudatが言ったように:

jps -v

すべてを出力しますJava processes {processID、params list} paramsリストが必要なアプリケーションを認識するのに十分でない場合は、実行時にダミーのparamsを追加してみてください。

Java -Dname=myApp -cp  myApp.jar some.client.main.MainFrame

これは次のように印刷されます。

7780 MainFrame -Dname=myApp

プロセスIDを使用して、プロセスIDを強制終了または監視できます。

20
d.raev

_LD_PRELOAD_ shimでこれを行うことができます: https://github.com/airlift/procname

シムは、プロセスの開始時にLinux固有のprctl()を呼び出すだけです。

_static void __attribute__ ((constructor)) procname_init()
{
   prctl(PR_SET_NAME, "myname");
}
_

呼び出しはメインスレッドで行われる必要があるため、Javaから、またはJVMTIエージェントを使用しても、別のスレッドで行われるため、これを行うことはできません。

11
David Phillips

私が最初にこれを読んだとき、プロセス名を変更するという考えは不可能だと思いました。ただし、 Sunフォーラムのこの古代のスレッド によれば、これを実現するためにJVM実行可能ファイルの周りにC++ラッパーを使用できます。

率直に言って、プロセス名を変更しようとするより標準的な解決策があると思うので、あなたの本当の問題は何なのかと思います。

5
Tim Bender

最適なオプションは、launch4j http://launch4j.sourceforge.net/ のようなものです。

このためにSunバグトラッカーにバグが記録されていますが、優先度は高くありません http://bugs.Sun.com/view_bug.do?bug_id=6299778

4
Noel Grandin

主に2つのアプローチがあります。1つは既に説明したとおりです。Launch4j、WinRun4Jなどのツールを使用してネイティブのWindowsランチャーを作成します。

より良いと思われる別のアプローチは、Apache Procrunを使用してJavaアプリケーションをWindowsサービスとしてラップすることです。インストールサービスプロセス中に、プロセスにOurApp.exeなどの意味のある名前を付けることができます。

必要なことは、prunsrv.exeの名前をOurApp.exeに変更し、install | start | stop | uninstallサービススクリプト内のすべてのprunsrv.exeをMyApp.exeに置き換えることです。

Apache Procrunを使用したプロセス名の変更Javaプログラム

2
jeffery.yuan

別のプロセス名を使用する場合は、独自のバイナリを作成してJavaアプリケーションを JSmooth などを使用して起動する必要があります。

この質問を見てください そのようなバイナリの作成についての議論。

2
Dave Webb

これは、Javaアプリケーションは実際には実行可能ではないため、Java仮想マシンが理由でJavaが表示されるため、プロセスモニターでは、アプリケーションのホストです。

しかし、LimeWireのようなことはできますが、それはGCJにあると思います- http://gcc.gnu.org/Java/

1
Lloyd