【问题标题】:How can I determine the command used to start the current jvm?如何确定用于启动当前 jvm 的命令?
【发布时间】:2010-11-23 21:27:10
【问题描述】:

我打算生一个孩子来做一些工作。我想使用与父进程相同的命令行来生成子进程。

例如,如果父级是这样启动的:

#>/usr/bin/java ParentProgram

然后我会打电话给

Runtime.exec("/usr/bin/java ChildProgram");

示例 2:

#>/usr/bin/jdb -cp ./:/home/name/tool/library.jar -Xmx4G ParentProgram

然后我会打电话给

Runtime.exec("/usr/bin/jdb -cp ./:/home/name/tool/library.jar -Xmx4G ChildProgram");

我知道我可以从系统属性中找到类路径。而不是使用 Runtime.exec 我计划使用 ProcessBuilder,它将父环境复制到子环境。但基本上我想使用与父级相同的 java 程序和参数。我没有在系统属性中找到此信息。

【问题讨论】:

  • 似乎在这里得到了回答:stackoverflow.com/questions/1518213/…
  • 该信息绝对有用。虽然它没有告诉我用于启动 jvm 的命令(即 /usr/bin/java),但它为我做了其他事情。当我使用 /usr/bin/java 启动程序时,它会显示所有传递的参数。但是,当我开始使用 /usr/bin/jdb 时,RuntimeMXBean 显示了 -Xdebug 和 -Xrunjdwp 的附加参数:transport=dt_socket,address=hostname.local:58481,suspend=y
    所以我认为 jdb 实际上使用额外的 args 启动普通 jvm(这也很有意义)。但是知道整个命令还是很高兴的。

标签: java runtime.exec


【解决方案1】:

你可以使用 JMX:

List<String> args = ManagementFactory.getRuntimeMXBean().getInputArguments();

【讨论】:

  • 您好 AlexR,感谢您的回答。但我仍然无法确定用于启动 jvm 的命令(即 /usr/bin/java)
【解决方案2】:

在 JDK 6 中,有一个名为 jinfo 的命令可以帮助您识别提供的参数

你只需要你的进程ID,并且要知道,你可以使用jps命令,它会告诉你所有正在运行的jvm进程和ID。

因此,使用以下命令,您可以通过所有命令行。使用相同的命令,您可以动态更改某些属性(请参见 jinfo -h)

jinfo

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-10
  • 2015-06-27
  • 2012-12-07
  • 1970-01-01
  • 2010-10-26
  • 1970-01-01
  • 2013-02-23
相关资源
最近更新 更多