Как получить командную строку, которая запустила процесс
Из 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". Распечатывает всю необходимую информацию.