how to change the name of a Java application process?
执行Java应用程序时,为其指定的进程名称通常为
这些方法适用于运行大量Java进程的服务器,并且您需要一种快速的方法来找到正确的jvm(不使用jps。)对于应用程序,我认为可以使用launch4j或其他包装器。
在Unix上,如果从shell sript(至少对于bash可能还有其他类似的shell)启动,则可以使用:
1 | exec -a goodname java ... |
启动
也许更好的替代方法(对于
Windows中的快捷方式无法解决问题,但是Windows Vista / 7支持使用
签出launch4j,它是一个可执行包装程序,可用于分配可执行文件名称。
除非您通过自己定制的可执行文件中的JNI启动Java,否则进程名称将始终为java.exe。
有几个Java启动器/包装器可以为您生成此可执行文件。
- Launch4j,看起来是最新的和最新的
- JSmooth
- install4J,商用,超出您的需要
这特定于Windows。
我面临着同样的问题,我必须使用taskkill杀死特定的Java程序。当我运行Java程序时,任务列表显示的是同一程序,其图像名称设置为java.exe。但是,使用taskkill / F java.exe杀死它会停止所有不需要的非预期的Java应用程序。
所以我使用以下命令运行相同的Java程序:
启动" MyProgramName" java Java程序。
在这里,启动命令将打开一个新窗口,并以窗口标题设置为MyProgramName的方式运行Java程序。
现在使用以下taskkill命令杀死这个Java程序:
taskkill / fi" MyProgramName"
您的Java程序只会被杀死。休息不会受到影响。
如果您使用的是Sun JDK,则还可以使用" jps"命令行工具来获取在包装盒上运行的Java进程的详细列表。
假设您真正追求的是以后终止正确的正确过程的方法,那么另一种解决方案是:
运行
1 | mruser 7518 7505 4 11:37 pts/3 00:00:00 /usr/bin/java -classpath MRD3030_Linked.jar peralex.MyApp |
然后
您可以使用
进程启动时,填充程序仅调用特定于Linux的
1 2 3 4 | static void __attribute__ ((constructor)) procname_init() { prctl(PR_SET_NAME,"myname"); } |
该调用必须在主线程上进行,因此不可能从Java甚至是JVMTI代理执行此操作,因为它们发生在不同的线程上。
并非所有类型的exec都支持-a标志。如果不是,则argv0程序执行类似的操作。