Javaプログラムが開始されると、システムプロセスモニターにJavaという名前が付けられます。多くのJavaプログラムは、そのように区別するのが難しいため、方法が存在する場合は素晴らしいでしょう。プロセスモニターに表示される名前を設定するには、これはオペレーティングシステムによって異なる場合があることを認識しています。
Javaインタープリターが次のように名前を設定するスイッチをサポートする場合、簡単な方法になります。
Java -processname MyProgram -jar MyProgram
しかし、私はそのようなスイッチを見つけることができなかったので、おそらく存在しないでしょう。プロセス名を設定するJavaのAPIも問題ありません。
だから、あなたは何か提案がありますか?
これが可能かどうかはわかりませんが、「jps」というJDKに付属のコマンドラインツールを使用できます。 * nix ps
に似ていますが、ただJavaプログラム。代わりにjps -v
は、Javaに渡したすべての引数を表示します。
また、私は人々が彼らのJavaプロセスに未使用の-Dmyprocessname
を引数に。
@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を強制終了または監視できます。
_LD_PRELOAD
_ shimでこれを行うことができます: https://github.com/airlift/procname
シムは、プロセスの開始時にLinux固有のprctl()
を呼び出すだけです。
_static void __attribute__ ((constructor)) procname_init()
{
prctl(PR_SET_NAME, "myname");
}
_
呼び出しはメインスレッドで行われる必要があるため、Javaから、またはJVMTIエージェントを使用しても、別のスレッドで行われるため、これを行うことはできません。
私が最初にこれを読んだとき、プロセス名を変更するという考えは不可能だと思いました。ただし、 Sunフォーラムのこの古代のスレッド によれば、これを実現するためにJVM実行可能ファイルの周りにC++ラッパーを使用できます。
率直に言って、プロセス名を変更しようとするより標準的な解決策があると思うので、あなたの本当の問題は何なのかと思います。
最適なオプションは、launch4j http://launch4j.sourceforge.net/ のようなものです。
このためにSunバグトラッカーにバグが記録されていますが、優先度は高くありません http://bugs.Sun.com/view_bug.do?bug_id=6299778
主に2つのアプローチがあります。1つは既に説明したとおりです。Launch4j、WinRun4Jなどのツールを使用してネイティブのWindowsランチャーを作成します。
より良いと思われる別のアプローチは、Apache Procrunを使用してJavaアプリケーションをWindowsサービスとしてラップすることです。インストールサービスプロセス中に、プロセスにOurApp.exeなどの意味のある名前を付けることができます。
必要なことは、prunsrv.exeの名前をOurApp.exeに変更し、install | start | stop | uninstallサービススクリプト内のすべてのprunsrv.exeをMyApp.exeに置き換えることです。
別のプロセス名を使用する場合は、独自のバイナリを作成してJavaアプリケーションを JSmooth などを使用して起動する必要があります。
この質問を見てください そのようなバイナリの作成についての議論。
これは、Javaアプリケーションは実際には実行可能ではないため、Java仮想マシンが理由でJavaが表示されるため、プロセスモニターでは、アプリケーションのホストです。
しかし、LimeWireのようなことはできますが、それはGCJにあると思います- http://gcc.gnu.org/Java/