web-dev-qa-db-ja.com

Javaアプリケーションプロセスの名前を変更する方法

Javaアプリケーションを実行するとき、それに与えられるプロセス名は通常Java.exeまたはjavaw.exe。しかし、どうすればアプリケーションの名前で呼び出せるようになりますか?

40
Ravindra

これらのメソッドは、多くのJavaプロセスが実行されており、正しいjvm(jpsを使用しない)をすばやく見つける方法が必要なサーバー)に適しています。アプリケーションについては、launch4jまたは別のラッパーを想定しています行く方法です。

UNIXでは、Shell sriptから起動する場合(少なくともbashの場合は、他の適切なシェルの場合も)、次のように使用できます。

exec -a goodname Java ...

Javaを起動して、0番目の引数として「goodname」を渡します。これは、psなどのプロセス名として表示されます。

おそらくより良い代替手段(topでも機能するようです)は、シンボリックリンクを作成することです:ln -s /usr/bin/Java /usr/local/bin/kallekula

Windowsのショートカットはうまくいきませんが、Windows Vista/7はmklinkを使用したシンボリックリンクをサポートしています。うまくいくかもしれませんが、私はテストしていません。 exec -aは、Windows上のcygwin bashでも動作します。

39
KarlP

チェックアウト launch4j 、これは、実行可能ファイル名を割り当てることができる実行可能ラッパーです。

17
z -

独自のカスタムビルド実行可能ファイルでJNIを介してJavaを起動しない限り、プロセス名は常にJava.exeになります。

この実行可能ファイルを生成できるJavaランチャー/ラッパーがいくつかあります。

10
basszero

これはWindowsに固有です。
同じ問題に直面していましたが、taskkillを使用して特定のJavaプログラムを強制終了する必要があります。 Javaプログラムを実行すると、tasklistは、Java.exeとして設定されたイメージ名で同じプログラムを表示していました。ただし、taskkill/F Java.exeを使用して強制終了すると、不要な、意図したアプリケーション以外のすべてのJavaアプリケーションが停止します。

だから私は同じJavaプログラムを使って実行します:

start "MyProgramName" Java java-program ..

ここでstartコマンドは新しいウィンドウを開き、ウィンドウのタイトルをMyProgramNameに設定してJavaプログラムを実行します。

このJavaプログラムを終了するには、次のtaskkillコマンドを使用します:

taskkill/fi "MyProgramName"

Javaプログラムはkillされるだけです。残りは影響を受けません。

6
elite21

Sun JDKを使用している場合は、「jps」コマンドラインツールを使用して、ボックスで実行されているJavaプロセスの詳細なリストを取得することもできます。

5
Rob H

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

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

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

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

3
David Phillips

あなたが本当に後を追っていることは、正しい正しいプロセスを後で終了する方法であると仮定すると、代替の解決策はこれです:

ps -ef | grep Javaを実行すると、次のようなリストが表示されます。

 mruser    7518  7505  4 11:37 pts/3    00:00:00 /usr/bin/Java -classpath MRD3030_Linked.jar peralex.MyApp

次に、pkill -f peralex.MyAppは正しいプロセスを強制終了します。

3
Noel Grandin

Execのすべてのフレーバーが-aフラグをサポートしているわけではありません。そうでない場合は、 argv プログラムが同様の処理を行います。

2
mpm

WinRun4J

多くのJava exeラッパーでは、カスタムexeは単なるランチャーであり、プロセスは通常のJava(w).exeとして実行されます。一方、 WinRun4J ではカスタムexeはアプリケーションを実行するプロセスであるため、たとえばタスクマネージャーではカスタムexeが表示されます。32ビットと64ビットのコンソールがサポートされ、コンソールはサポートされていません(多数の構成オプションがあります)。

0
user3479450