简体   繁体   中英

How do I get the commandline that started the process

From Java, is it possible to get the complete commandline with all arguments that started the application?

System.getEnv() and System.getProperties() do not appear to contain the values.

Some of it is available from the RuntimeMXBean, obtained by calling ManagementFactory.getRuntimeMXBean()

You can then, for example call getInputArguments()

The javadocs for which say:

Returns the input arguments passed to the Java virtual machine which does not include the arguments to the main method. This method returns an empty list if there is no input argument to the Java virtual machine.

Some Java virtual machine implementations may take input arguments from multiple different sources: for examples, arguments passed from the application that launches the Java virtual machine such as the 'java' command, environment variables, configuration files, etc.

Typically, not all command-line options to the 'java' command are passed to the Java virtual machine. Thus, the returned input arguments may not include all command-line options.

In Linux/UNIX that should be possible when you get the output of that command (run in a shell)

cat /proc/$PPID/cmdline

But that is not portable at all and should therefore not be used in Java...

The following links may help you get there:

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?

Just as a note:

In Windows you have Process Explorer by Sysinternals that shows you the command line used to open the process. Right click the process and select Properties... You'll see Command Line in the window that is opened.

You might want to look into how jps does this. It's a Java program that is able to get the full command line for all Java processes, including full class name of main class and JVM options.

有一个环境变量%〜dp0返回完整路径

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

Have a look at YAJSW (Yet Another Java Service Wrapper) - it has JNA-based implementations for various OSes (including win32 and linux) that do exactly this so it can grab the commandline for a running process and create a config that wraps it in a service. A bit more info here .

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

ProcessHandle.current().info().commandLine()

If you are using solaris as the OS, take a look at "pargs" utility. Prints all the info required.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM