Java 9提供了获取Process
信息的方法,但是我仍然不知道如何获取进程的CommandLine
和arguments
:
Process p = Runtime.getRuntime().exec("notepad.exe E:\\test.txt"); ProcessHandle.Info info = p.toHandle().info(); String[] arguments = info.arguments().orElse(new String[]{}); System.out.println("Arguments : " + arguments.length); System.out.println("Command : " + info.command().orElse("")); System.out.println("CommandLine : " + info.commandLine().orElse(""));
结果:
Arguments : 0 Command : C:\Windows\System32\notepad.exe CommandLine :
但我期待:
Arguments : 1 Command : C:\Windows\System32\notepad.exe CommandLine : C:\Windows\System32\notepad.exe E:\\test.txt
看起来这是在JDK-8176725中报告的。 这里是描述问题的评论:
命令行参数不能通过非特权API用于其他进程,因此可选项总是空的。 API明确表示这些值是操作系统特定的。 如果将来,这些参数可以通过Window API获得,那么可以更新实现。
顺便说一下,信息结构是由本地代码填充; 这些字段的分配不会出现在Java代码中。
尝试使用ProcessBuilder
而不是Runtime#exec()
Process p = new ProcessBuilder("notepad.exe", "E:\\test.txt").start();
或者另一种方式来创建一个过程:
Process p = Runtime.getRuntime().exec(new String[] {"notepad.exe", "E:\\test.txt"});