Как получить командную строку, которая запустила процесс

Из Java можно ли получить полную командную строку со всеми аргументами, которые запустили приложение?

System.getEnv() и System.getProperties(), как представляется, не содержат значений.

Ответы

Ответ 1

Некоторые из них доступны из RuntimeMXBean, полученных путем вызова ManagementFactory.getRuntimeMXBean()

Затем вы можете вызвать, например, вызов getInputArguments()

javadocs, для которых говорят:

Возвращает входные аргументы, переданные виртуальной машине Java, которая не включает аргументы в основной метод. Этот метод возвращает пустой список, если нет входных аргументов виртуальной машины Java.

Некоторые реализации виртуальной машины Java могут принимать входные аргументы из разных источников: например, аргументы, переданные из приложения, запускающего виртуальную машину Java, такую ​​как команда "java", переменные среды, файлы конфигурации и т.д.

Как правило, не все параметры командной строки для команды "java" передаются на виртуальную машину Java. Таким образом, возвращаемые входные аргументы могут не включать все параметры командной строки.

Ответ 2

В Linux/UNIX это должно быть возможно, когда вы получите результат этой команды (запустите в оболочке)

cat /proc/$PPID/cmdline

Но это вообще не переносится и поэтому не должно использоваться в Java...

Ответ 3

Следующие ссылки могут помочь вам добраться:

Как получить аргументы командной строки для выполняемого процесса

получить командную строку запущенных процессов

Как получить список текущих открытых окон/процессов с Java?

Как примечание:

В Windows вы Process Explorer от Sysinternals, который показывает вам командную строку, используемую для открытия процесса. Щелкните правой кнопкой мыши процесс и выберите "Свойства"... В открывшемся окне вы увидите "Командная строка".

Ответ 4

Существует переменная среды% ~ dp0, которая возвращает полный путь

Ответ 5

Вы можете посмотреть, как это делает jps. Это программа Java, которая может получить полную командную строку для всех процессов Java, включая полное имя класса для основного класса и параметров JVM.

Ответ 6

Один из вариантов, который я использовал в прошлом для поддержки кросс-платформенного блеска, заключается в том, чтобы установить командную строку как переменную среды до выдачи команды.

Ответ 7

Посмотрите на YAJSW (еще один Java Wrapper) - он имеет JNA-реализацию для различных ОС (включая win32 и linux), которые делают именно это, поэтому он может захватить командную строку для выполняемого процесса и создать конфигурацию, которая обертывает его в службу. Немного больше здесь.

Ответ 8

Если вы используете Solaris в качестве ОС, посмотрите на утилиту "pargs". Распечатывает всю необходимую информацию.