【问题标题】:How to change/assign process name of java .jar如何更改/分配 java .jar 的进程名称
【发布时间】:2023-03-24 09:20:01
【问题描述】:

我在 Linux 下运行 Minecraft,这涉及运行一个可执行的 .jar 文件。这意味着它在 ps 下显示为“java”,而不是“minecraft”。我想给它分配进程名称“minecraft”。

环顾四周,我发现了以下通过 bash 分配进程名称的技巧:

how to change the name of a Java application process?

exec -a goodname java ...

我通常用:

java -cp ~/Games/Minecraft/Minecraft.jar net.minecraft.LauncherFrame

所以尝试制作一个 bash 脚本:

#!/bin/bash
exec -a minecraft java -cp ~/Games/Minecraft/Minecraft.jar net.minecraft.LauncherFrame

但是当我运行它时,它仍然在 ps 命令下显示为“java”。

我做错了什么?

【问题讨论】:

  • exec -a 在 Ubuntu 8.04 上为我工作,但它仍然显示所有 java 参数(“-cp”等)并且 killall 不会通过它的新名称找到进程,只有 @ 987654326@ 工作。您可能还希望使用 binfmt 直接从命令行运行 JAR 文件。
  • binfmt 是否允许更改进程名称?如果是这样,在这种情况下我将如何使用它?
  • 哦,我的错,使用 binfmt 它仍然显示为 java。此外,“exec -a”也停止为它工作。所以这实际上不是一个解决方案,而是一个完全相反的解决方案。
  • exec -a 在 centos7 下不起作用。

标签: java linux bash minecraft


【解决方案1】:

它对我有用。我没有用java测试过,但是我用sleep测试过:

victor@vz:~$ exec -a minecraft sleep 1m &
[1] 3858
victor@vz:~$ ps x | grep mine
 3858 pts/2    S      0:00 minecraft 1m
 3860 pts/2    S+     0:00 grep --color=auto mine
victor@vz:~$ 

但是,据我从文档中可以看出,这似乎只是表面上的改变:

victor@vz:~$ help exec exec: exec [-cl] [-a 名称] [命令 [参数 ...]] [重定向...] 用给定的命令替换 shell。

Execute COMMAND, replacing this shell with the specified program.
ARGUMENTS become the arguments to COMMAND.  If COMMAND is not specified,
any redirections take effect in the current shell.

Options:
  -a name pass NAME as the zeroth argument to COMMAND

参考 OP 对此答案的评论:我刚刚在远程机器上用 java 测试了它:

victorz@exa:~$ javac test.java # spits out an Administrator.class file among others
victorz@exa:~$ exec -a minecraft java Administrator &
[1] 13142
victorz@exa:~$ ps x | grep mine
13142 pts/1    Sl     0:00 minecraft Administrator
13161 pts/1    S+     0:00 grep --color=auto mine
victorz@exa:~$ 

也许您没有使用x 切换到ps?除非我使用x 开关,否则我找不到匹配项。

【讨论】:

  • 我用 sleep 试了一下,效果和你说的一样。但它似乎不适用于 minecraft/java,我不知道为什么。 [编辑:我只想要外观上的改变,以便它显示为带有 ps 的“我的世界”。]
  • @B.斯莱德,也许你的“java”是一种启动java二进制文件的包装shell脚本?因此它获得了新的进程名称,但随后启动了 java 并因此获得了另一个新名称(“java”)。就像 binfmt 发生的那样。尝试直接运行 java 二进制文件,例如 /wherever/your/jvm/is/bin/java。
  • @Victor:是的,如果我使用 -x 开关,它就像你说的那样工作。问题是我希望 conky 能够看到它,而且似乎没有任何方法可以将 switch 传递给 conky 的 top 命令。
  • @Sergey Tachenov:看起来我的“java”可能确实是某种包装外壳脚本本身。但是,当我尝试直接运行该程序时,会出现错误,以“java.lang.NoClassDefFoundError”开头。
  • @B.斯莱德,我刚刚检查过,没有 x 选项它确实不起作用。我认为 x 选项仅用于禁用终端过滤。我相信仍然应该有办法做到这一点,可能涉及 /proc fs 的一些阴谋。
猜你喜欢
  • 2010-10-27
  • 1970-01-01
  • 2018-09-30
  • 1970-01-01
  • 2021-09-19
  • 2023-02-06
  • 1970-01-01
  • 2016-12-24
  • 1970-01-01
相关资源
最近更新 更多