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

40 java process argv

执行Java应用程序时,给定的进程名称通常为java.exejavaw.exe.但是如何通过我的应用程序名称来调用它呢?

Kar*_*rlP 39

这些方法适用于运行大量java进程的服务器,并且需要快速查找正确的jvm(不使用jps).对于应用程序,我认为launch4j或其他包装器是可行的方法.

在unix上,如果你从shell sript(至少对于bash以及可能用于其他体面的shell)启动,你可以使用:

exec -a goodname java ...
Run Code Online (Sandbox Code Playgroud)

启动java并传递"goodname"作为第0个参数,它将显示为进程名称ps等.

一个或许更好的选择(似乎也适用top)是创建一个符号链接:ln -s /usr/bin/java /usr/local/bin/kallekula.

Windows中的快捷方式不起作用,但是windows vista/7支持使用符号链接mklink.这可能有用,但我还没有测试过.我不确定是否exec -a也适用于Windows上的cygwin bash.

  • 似乎不是一个通用的解决方案. (3认同)

z *_* - 17

查看launch4j,它是一个可执行的包装器,允许您分配可执行文件名.

  • 该功能已于2013年删除:版本3.1.0-beta2中的更改(20-08-2013)删除了与较新Windows版本不兼容的自定义进程名称功能. (5认同)
  • 确实,launch4j 不再允许您更改 javaw.exe 进程的名称。但是,如果您使用选项stayalive=true 创建launch4j exe,那么除了javaw.exe 进程之外,您的自定义exe 文件的进程名称将保留在进程列表中。因此,这使用户可以选择通过使用自定义名称终止进程来终止正确的 Java 进程。 (2认同)

bas*_*ero 10

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

有几个java启动器/包装器可以为您生成此可执行文件.


Rob*_*b H 5

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


小智 5

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

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

启动“ MyProgramName” java Java程序。

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

现在使用以下taskkill命令杀死这个Java程序:

taskkill / fi“ MyProgramName”

您的Java程序只会被杀死。休息不会受到影响。

  • 谢谢,这正是我所寻找的。只是一个小评论:“taskkill /fi“MyProgramName””对我不起作用。我必须添加过滤条件:`taskkill /fi "WINDOWTITLE eq MyProgramName"` (2认同)