Из Java можно ли получить полную командную строку со всеми аргументами, которые запустили приложение?
System.getEnv() и System.getProperties(), как представляется, не содержат значений.
Из Java можно ли получить полную командную строку со всеми аргументами, которые запустили приложение?
System.getEnv() и System.getProperties(), как представляется, не содержат значений.
Некоторые из них доступны из RuntimeMXBean, полученных путем вызова ManagementFactory.getRuntimeMXBean()
Затем вы можете вызвать, например, вызов getInputArguments()
javadocs, для которых говорят:
Возвращает входные аргументы, переданные виртуальной машине Java, которая не включает аргументы в основной метод. Этот метод возвращает пустой список, если нет входных аргументов виртуальной машины Java.
Некоторые реализации виртуальной машины Java могут принимать входные аргументы из разных источников: например, аргументы, переданные из приложения, запускающего виртуальную машину Java, такую как команда "java", переменные среды, файлы конфигурации и т.д.
Как правило, не все параметры командной строки для команды "java" передаются на виртуальную машину Java. Таким образом, возвращаемые входные аргументы могут не включать все параметры командной строки.
В Linux/UNIX это должно быть возможно, когда вы получите результат этой команды (запустите в оболочке)
cat /proc/$PPID/cmdline
Но это вообще не переносится и поэтому не должно использоваться в Java...
Следующие ссылки могут помочь вам добраться:
Как получить аргументы командной строки для выполняемого процесса
получить командную строку запущенных процессов
Как получить список текущих открытых окон/процессов с Java?
Как примечание:
В Windows вы Process Explorer от Sysinternals, который показывает вам командную строку, используемую для открытия процесса. Щелкните правой кнопкой мыши процесс и выберите "Свойства"... В открывшемся окне вы увидите "Командная строка".
Существует переменная среды% ~ dp0, которая возвращает полный путь
Вы можете посмотреть, как это делает jps. Это программа Java, которая может получить полную командную строку для всех процессов Java, включая полное имя класса для основного класса и параметров JVM.
Один из вариантов, который я использовал в прошлом для поддержки кросс-платформенного блеска, заключается в том, чтобы установить командную строку как переменную среды до выдачи команды.
Посмотрите на YAJSW (еще один Java Wrapper) - он имеет JNA-реализацию для различных ОС (включая win32 и linux), которые делают именно это, поэтому он может захватить командную строку для выполняемого процесса и создать конфигурацию, которая обертывает его в службу. Немного больше здесь.
Если вы используете Solaris в качестве ОС, посмотрите на утилиту "pargs". Распечатывает всю необходимую информацию.