2010-03-29 2 views
13

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

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

+2

Вы имеете в виду аргументы, предоставленные jvm также? есть вопрос, связанный с этим http://stackoverflow.com/questions/1490869/how-to-get-vm-arguments-from-inside-of-java-application – LB40

ответ

12

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

Вы можете, например, позвонить

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

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

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

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

+2

Я думаю, что это самое лучшее, что вы можете получить, используя чистую Java. – msandiford

+0

+1 Какой-то образец кода мне это идеальный !!! :) – OscarRyz

+0

@ Stephen Denne ... Не поклонник этого. Мое понимание вопроса состояло в том, чтобы получить командную строку (скажем, что показано в 'ps -f' с командной строкой. Как говорится на странице руководства:« _ не включает аргументы в основной метод. »« Прямо сейчас, m пытается определить, что какая-то другая программа переходит к 'main', которая не видна моему классу. – will

1

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

cat /proc/$PPID/cmdline 

Но это не является переносимым на всех, и поэтому не могут быть использованы в Java .. .

+0

Хорошо, спасибо. Это нормально, если он не переносится, однако мне также нужно работать и с Windows. – aksamit

+2

@aksamit - другими словами, вам нужно, чтобы он был переносимым между (по крайней мере) Linux и Windows ... duh! @Johannes - «поэтому не следует использовать в Java» слишком силен. Не совсем неправильно писать не переносимый код в Java ... если этого требуют обстоятельства. –

+0

@Johannes Weiß: так что Солнце, где только что сошли с ума, когда они решили поставить * Runtime.exec * вправо? Я имею в виду, что это явно не требует никакой необходимости и должно быть удалено с языка, чтобы угодить «чистым богам Java»? Или ? – SyntaxT3rr0r

1

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

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, которая показывает командную строку, используемую для открытия процесса. Щелкните правой кнопкой мыши процесс и выберите «Свойства» ... В открывшемся окне вы увидите «Командная строка».

0

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

0

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

1

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

+1

On ... какая ОС? – OscarRyz

+1

Упс .. Я забыл, что это в окнах. Очень полезно запустить переключатель в UNC-путь для командного файла. Пример Путь UNC \\ Server \ share \ folder1 \ runit.bat , если первая строка пакета - pushd% ~ dp0, тогда ваш текущий путь будет \\ Server \ share \ folder1 \ – ggonsalv

+0

. ответ не имеет отношения к тому, почему я нашел этот вопрос, но полезно знать. –

0

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

0

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

Смежные вопросы