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

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

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

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

然后,您可以调用getInputArguments()

javadocs说:

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

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

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

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

 cat /proc/$PPID/cmdline 

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

以下链接可帮助您实现目标:

如何获取正在运行的进程的命令行参数

获取正在运行的进程的命令行

如何使用Java获取当前打开的窗口/进程列表?

就像一张纸条:

在Windows中,您有Sysinternals的Process Explorer,它显示用于打开进程的命令行。 右键单击该过程并选择属性…您将在打开的窗口中看到命令行。

有一个环境变量%~dp0,它返回完整的路径

您可能想了解jps如何做到这一点。 它是一个Java程序,能够获取所有Java进程的完整命令行,包括主类的完整类名和JVM选项。

我过去用来维护跨平台闪存的一个选项是在发出命令之前将命令行设置为环境变量。

看看YAJSW(又一个Java服务包装器) – 它有各种操作系统(包括win32和linux)的基于JNA的实现,这样做可以获取正在运行的进程的命令行,并创建一个包含它的配置一项服务。 这里有更多信息。

如果您使用solaris作为操作系统,请查看“pargs”实用程序。 打印所需的所有信息。