如何获取启动该过程的命令行

aks*_*mit 14 java command-line environment-variables

从Java,是否可以获得包含启动应用程序的所有参数的完整命令行?

System.getEnv()并且System.getProperties()似乎不包含值.

Ste*_*nne 13

其中一些可以通过调用获得的RuntimeMXBean获得 ManagementFactory.getRuntimeMXBean()

然后你可以,例如打电话 getInputArguments()

javadocs说:

返回传递给Java虚拟机的输入参数,该参数不包含main方法的参数.如果Java虚拟机没有输入参数,则此方法返回空列表.

一些Java虚拟机实现可以从多个不同的源获取输入参数:例如,从启动Java虚拟机的应用程序传递的参数,例如'java'命令,环境变量,配置文件等.

通常,并非'java'命令的所有命令行选项都传递给Java虚拟机.因此,返回的输入参数可能不包括所有命令行选项.

  • 我认为这是使用纯Java可以获得的最佳效果. (2认同)

Nol*_*uen 6

Java 9开始,您可以使用ProcessHandle来获取进程的命令行:

ProcessHandle.current().info().commandLine()
Run Code Online (Sandbox Code Playgroud)

  • 在 Windows 上不起作用,返回的可选始终为空。 (2认同)

Joh*_*iss 5

在 Linux 中,当您获得该命令的输出(在 shell 中运行)时,这应该是可能的

cat /proc/$PPID/cmdline
Run Code Online (Sandbox Code Playgroud)

但这根本不可移植,因此不应该在 Java 中使用......

  • @aksamit - 换句话说,你需要它在(至少)Linux 和 Windows 之间可移植......呃!@Johannes - “因此不应在Java中使用”太强了。如果情况需要的话,用 Java 编写不可移植的代码并不是完全错误的。 (2认同)