Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何更改Java应用程序进程的名称?_Java_Process_Argv - Fatal编程技术网

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

如何更改Java应用程序进程的名称?,java,process,argv,Java,Process,Argv,当执行Java应用程序时,给它的进程名通常是Java.exe或javaw.exe。但是我如何才能让它被我的应用程序的名称调用呢?请检查,它是一个可执行的包装器,允许您分配可执行的名称。除非您在自己定制的可执行文件中通过JNI启动Java,否则进程名称将始终是Java.exe 有几个java启动器/包装器可以为您生成此可执行文件 ,看起来是最新的 ,商业,比你需要的更多 如果您使用的是Sun JDK,您还可以使用“jps”命令行工具获取机箱上运行的Java进程的详细列表。这些方法适用于运行大量

当执行Java应用程序时,给它的进程名通常是
Java.exe
javaw.exe
。但是我如何才能让它被我的应用程序的名称调用呢?

请检查,它是一个可执行的包装器,允许您分配可执行的名称。

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

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

  • ,看起来是最新的
  • ,商业,比你需要的更多

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

这些方法适用于运行大量Java进程的服务器,并且需要快速找到正确jvm(不使用jps)的应用程序,我想launch4j或其他包装器是最好的选择

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

exec -a goodname java ...
启动
java
并将“goodname”作为第0个参数传递,该参数将在
ps
等中显示为进程名称

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


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

假设您真正想要的是一种在以后终止正确流程的方法,那么另一种解决方案是:

运行
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标志。如果您的没有,程序会执行类似的操作。

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

因此,我使用以下方法运行相同的java程序: 启动“MyProgramName”java程序。

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

现在,要禁用此java程序,请使用以下taskkill命令: taskkill/fi“MyProgramName”


您的Java程序将仅被终止。其余部分将不受影响。

您可以使用
LD\u预加载
垫片:

当进程启动时,shim只需调用Linux特定的
prctl()

static void __attribute__ ((constructor)) procname_init()
{
   prctl(PR_SET_NAME, "myname");
}
调用必须发生在主线程上,因此从Java甚至使用JVMTI代理都不可能做到这一点,因为这些调用发生在不同的线程上。


在许多JavaEXE包装器中,自定义exe只是一个启动器,进程仍然像通常的Java(w).exe一样运行。另一方面,自定义exe是运行应用程序的进程,因此,例如,在任务管理器中,会显示自定义exe。它支持32位和64位、控制台和无控制台(以及许多配置选项)。

我需要在windows中解决这一问题,使我能够停止特定的java进程。我已经决定使用一个.bat文件来运行不同的.jar文件,.bat文件的第一行是标题“Name to give the cmd window”,然后当我查看不同的cmd window时,我可以看到哪个是我想要停止的,并通过该cmd window按Ctrl-C键。

这对启动服务器等很有好处,因为它在start shell-script中是一个简单的编辑。不,当我阅读这个问题时,我完全沉浸在unix思考中。我已经编辑了答案。我认为它甚至在Ubuntu 11.04上都不起作用。事实证明,它设置了一些名称,但没有设置“根”名称
ps x
显示指定的名称,就像被告知“显示自定义线程名称
”的
htop
一样,但默认情况下,两者都显示java`可执行文件名。'top'似乎显示可执行文件名(磁盘上的文件名)。'ps'显示arg[0]我想top过去也显示了这一点,但可能是为了提高安全性而更改了它。我想不可能更改指向exe的链接。但是,始终可以使用另一行进行软链接。我已再次更新了答案。@KarlP如何在netbeans javafx项目中更改它,同时构建独立的exe file?请注意,只有在/membered/命令行未被系统截断的情况下,此选项才有效。Linux和Solaris都对被记住的命令行的长度有限制(与可接受的最大长度无关),并且您可以通过一个较长的类路径轻松地超越它……即使您要重命名java.exe?该功能已在2013年被删除:版本3.1.0-beta2(20-08-2013)中的更改已删除与较新Windows版本不兼容的自定义进程名功能。确实,launch4j不再允许您更改javaw.exe进程的名称。但是,如果使用选项stayalive=true创建launch4j exe,则自定义exe文件的进程名将保留在add中的进程列表中因此,这为用户提供了通过使用自定义名称终止进程来终止正确java进程的选项。是的,在Windows 10中进行了测试。如果为真,应用程序名称及其徽标将出现在任务管理器中。但问题是,如果我终止了应用程序名称