如何更改Java应用程序进程的名称?

执行Java应用程序时,给它的进程名称通常是java.exejavaw.exe 。 但是我怎样才能让我的应用程序的名称叫它?

这些方法适用于运行大量java进程的服务器,以及需要快速find正确jvm(不使用jps)的服务器。对于应用程序,我认为launch4j或其他包装器是最好的select。

在unix上,如果你从一个shell sript启动(至less对于bash和其他像样的shell),你可以使用:

 exec -a goodname java ... 

启动java并将“goodname”作为第0个parameter passing,这将在ps显示为进程名称。

一个可能更好的替代方法(似乎也适用于top )是创build一个符号链接: ln -s /usr/bin/java /usr/local/bin/kallekula

Windows中的快捷方式不会诀窍,但Windows Vista / 7支持使用mklink符号链接。 这可能工作,但我没有testing。 我不确定exec -a也适用于Windows上的cygwin bash。

检查出launch4j ,它是一个可执行的包装,允许您分配可执行文件的名称。

除非您在自己的自定义可执行文件中通过JNI启动Java,否则进程名称将始终为java.exe。

有几个Java启动程序/包装可以为您生成这个可执行文件。

  • Launch4j ,看起来是最新的和最新的
  • JSmooth
  • 安装4J ,商业,超过你的需要

如果您使用的是Sun JDK,则还可以使用“jps”命令行工具来获取运行在框中的Java进程的详细列表。

假设你真的以后是一种终止正确的过程的方法,那么另一种解决scheme是:

运行ps -ef | grep java 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将杀死正确的进程。

这是特定于Windows的。
我面临着同样的问题,我必须杀死使用taskkill特定的Java程序。 当我运行java程序时, tasklist显示的图像名称设置为java.exe 。 但使用taskkill / F java.exe杀死它将停止除了预期不需要的以外的所有其他Java应用程序。

所以我运行相同的Java程序使用:

启动“MyProgramName”java java-program ..

这里start命令会打开一个新窗口,并运行窗口标题设置为MyProgramName的java程序。

现在用这个java程序使用下面的taskkill命令:

taskkill / fi“MyProgramName”

你的Java程序只会被杀死。 rest将不受影响。

并不是所有的exec都支持-a标志。 如果你的没有,那么argv0程序也会做类似的事情。

你可以用LD_PRELOAD shim来做到这一点: https : //github.com/airlift/procname

当进程启动时,shim简单地调用Linux特定的prctl()

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

调用必须发生在主线程上,所以不可能从Java或甚至是JVMTI代理程序这样做,因为这些发生在不同的线程上。

我已经通过使用Janel解决了同样的问题。 它提供了一个非常简单的方法来创build.jar本地可执行文件(exe)的Windows,作为新的服务开始。 使用以下过程在Windows中将Java应用程序创build为可执行文件:

  1. 从janel下载并解压缩文件。
  2. 然后将两个文件JanelWindows.exe,JanelWindows.lap复制到您的.jar所在的文件夹中。
  3. 现在将文件JanelWindows.exe和JanelWindows.lap重命名为jarname.exe和jarname.lap
  4. 现在在文本编辑器中打开jarname.lap并设置属性:

    -Djava.class.path = .jar文件的path,janel.main.class = ipSetting.Start

现在你可以打开yourjar.exe作为新的进程。 希望这将有助于somone …