Javaアプリケーションを実行するとき、それに与えられるプロセス名は通常Java.exe
またはjavaw.exe
。しかし、どうすればアプリケーションの名前で呼び出せるようになりますか?
これらのメソッドは、多くの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でも動作します。
チェックアウト launch4j 、これは、実行可能ファイル名を割り当てることができる実行可能ラッパーです。
これは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されるだけです。残りは影響を受けません。
Sun JDKを使用している場合は、「jps」コマンドラインツールを使用して、ボックスで実行されているJavaプロセスの詳細なリストを取得することもできます。
_LD_PRELOAD
_シムでこれを行うことができます: https://github.com/airlift/procname
シムは、プロセスの開始時にLinux固有のprctl()
を呼び出すだけです。
_static void __attribute__ ((constructor)) procname_init()
{
prctl(PR_SET_NAME, "myname");
}
_
呼び出しはメインスレッドで発生する必要があるため、Javaから、またはJVMTIエージェントでさえも、別のスレッドで発生するため、これを行うことはできません。
あなたが本当に後を追っていることは、正しい正しいプロセスを後で終了する方法であると仮定すると、代替の解決策はこれです:
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
は正しいプロセスを強制終了します。
Execのすべてのフレーバーが-aフラグをサポートしているわけではありません。そうでない場合は、 argv プログラムが同様の処理を行います。