从Java,是否可以获得包含启动应用程序的所有参数的完整命令行?
System.getEnv()
和System.getProperties()
似乎不包含值。
答案 0 :(得分:13)
其中一些可以从RuntimeMXBean获得,通过调用ManagementFactory.getRuntimeMXBean()
然后,您可以拨打getInputArguments()
javadocs说:
返回传递给Java虚拟机的输入参数,该参数不包含main方法的参数。如果Java虚拟机没有输入参数,则此方法返回空列表。
某些Java虚拟机实现可能会从多个不同的源获取输入参数:例如,从启动Java虚拟机的应用程序传递的参数,如“java”命令,环境变量,配置文件等。
通常,并非'java'命令的所有命令行选项都传递给Java虚拟机。因此,返回的输入参数可能不包括所有命令行选项。
答案 1 :(得分:2)
在Linux / UNIX中,当你获得该命令的输出(在shell中运行)时应该是可能的
cat /proc/$PPID/cmdline
但这根本不可移植,因此不应在Java中使用......
答案 2 :(得分:1)
以下链接可帮助您实现目标:
How to get command line arguments for a running process
get command-line of running processes
How to get a list of current open windows/process with Java?
就像一张纸条:
在Windows中,您有Process Explorer by Sysinternals,其中显示了用于打开进程的命令行。右键单击该过程并选择属性...您将在打开的窗口中看到命令行。
答案 3 :(得分:1)
有一个环境变量%~dp0,它返回完整路径
答案 4 :(得分:0)
您可能想了解jps
如何做到这一点。它是一个Java程序,能够获取所有Java进程的完整命令行,包括主类的完整类名和JVM选项。
答案 5 :(得分:0)
我过去用来维护跨平台闪存的一个选项是在发出命令之前将命令行设置为环境变量。
答案 6 :(得分:0)
看一下YAJSW(又一个Java服务包装器) - 它有各种操作系统(包括win32和linux)的基于JNA的实现,这样做可以获取正在运行的进程的命令行并创建一个配置将它包装在服务中。更多信息here。
答案 7 :(得分:0)
如果您使用solaris作为操作系统,请查看“pargs”实用程序。打印所需的所有信息。