Из Java, можно ли получить полную командную строку со всеми аргументами, запускавшими приложение?Как получить командную строку, которая начала процесс
System.getEnv()
и System.getProperties()
, как представляется, не содержат значений.
Из Java, можно ли получить полную командную строку со всеми аргументами, запускавшими приложение?Как получить командную строку, которая начала процесс
System.getEnv()
и System.getProperties()
, как представляется, не содержат значений.
Некоторые из них доступны из RuntimeMXBean, полученной по телефону ManagementFactory.getRuntimeMXBean()
Вы можете, например, позвонить
The JavaDocs, для которых говорят:
Возвращает входные аргументы, передаваемые к виртуальной машине Java, которая не включает аргументы в основной метод. Этот метод возвращает пустой список, если нет входных аргументов виртуальной машины Java.
Некоторые реализации виртуальной машины Java могут принимать входные аргументы из множества различных источников: примеры, аргументы, переданные из приложения, которое запускает виртуальную машину Java, такие как команда «Java», переменные окружения, файлы конфигурации и т.д.
Как правило, не все параметры командной строки для команды «java» передаются на виртуальную машину Java. Таким образом, возвращаемые входные аргументы могут не включать все параметры командной строки.
Я думаю, что это самое лучшее, что вы можете получить, используя чистую Java. – msandiford
+1 Какой-то образец кода мне это идеальный !!! :) – OscarRyz
@ Stephen Denne ... Не поклонник этого. Мое понимание вопроса состояло в том, чтобы получить командную строку (скажем, что показано в 'ps -f' с командной строкой. Как говорится на странице руководства:« _ не включает аргументы в основной метод. »« Прямо сейчас, m пытается определить, что какая-то другая программа переходит к 'main', которая не видна моему классу. – will
В Linux/UNIX, которые должны быть возможно, когда вы получаете вывод этой команды (запуска в оболочке)
cat /proc/$PPID/cmdline
Но это не является переносимым на всех, и поэтому не могут быть использованы в Java .. .
Хорошо, спасибо. Это нормально, если он не переносится, однако мне также нужно работать и с Windows. – aksamit
@aksamit - другими словами, вам нужно, чтобы он был переносимым между (по крайней мере) Linux и Windows ... duh! @Johannes - «поэтому не следует использовать в Java» слишком силен. Не совсем неправильно писать не переносимый код в Java ... если этого требуют обстоятельства. –
@Johannes Weiß: так что Солнце, где только что сошли с ума, когда они решили поставить * Runtime.exec * вправо? Я имею в виду, что это явно не требует никакой необходимости и должно быть удалено с языка, чтобы угодить «чистым богам Java»? Или ? – SyntaxT3rr0r
следующие ссылки могут помочь вам попасть туда:
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?
Так же, как примечание:
В Windows у вас есть Process Explorer by Sysinternals, которая показывает командную строку, используемую для открытия процесса. Щелкните правой кнопкой мыши процесс и выберите «Свойства» ... В открывшемся окне вы увидите «Командная строка».
Возможно, вы захотите изучить, как jps
делает это. Это программа Java, которая может получить полную командную строку для всех процессов Java, включая полное имя класса для основного класса и параметров JVM.
Один из вариантов, который я использовал в прошлом для поддержки кросс-платформенного сияния, заключается в том, чтобы установить командную строку как переменную среды до выдачи команды.
Существует переменная среды% ~ dp0, которая возвращает полный путь
On ... какая ОС? – OscarRyz
Упс .. Я забыл, что это в окнах. Очень полезно запустить переключатель в UNC-путь для командного файла. Пример Путь UNC \\ Server \ share \ folder1 \ runit.bat , если первая строка пакета - pushd% ~ dp0, тогда ваш текущий путь будет \\ Server \ share \ folder1 \ – ggonsalv
. ответ не имеет отношения к тому, почему я нашел этот вопрос, но полезно знать. –
взглянуть на YAJSW (Yet Another Java Service Wrapper) - имеет реализации СОП на основе для различных операционных систем (включая win32 и Linux), что сделайте именно это, чтобы он мог захватить командную строку для выполняемого процесса и создать конфигурацию, которая обертывает ее в службе. Немного больше информации here.
Если вы используете Solaris в качестве ОС, посмотрите на утилиту «pargs». Распечатывает всю необходимую информацию.
Вы имеете в виду аргументы, предоставленные jvm также? есть вопрос, связанный с этим http://stackoverflow.com/questions/1490869/how-to-get-vm-arguments-from-inside-of-java-application – LB40