Определить запущенные классы и jar-файлы из вывода Linux ps - PullRequest
2 голосов
/ 24 ноября 2011

Моя цель - перечислить в STDOUT файлы классов и файлы .jar, выполняемые java на сервере Linux. Я мог бы сделать некоторые вещи getopts, чтобы получить аргументы для -jar, но другие процессы, идентифицируемые

ps -ef | grep java или ps -eo args | grep java

может выполнять файл класса, например, java -classpath / a / b / c myclass A1 A2. Я обеспокоен тем, что я смотрю на не элегантное решение, полное длинных линий greps и awk, чтобы решить то, что должно быть (я думаю) простым запросом. Учитывая, что:

  1. некоторые вызовы просто для java, а другие - для полного пути к java,

  2. В командной строке для запуска процесса могут быть установлены различные (или нет) параметры Java,

  3. некоторые процессы вызывают файлы .jar, некоторые вызывают файлы .class и

  4. в классе могут быть аргументы,

Каков наилучший способ получить простой список исполняемых файлов Java, например:

abc.jar

mymainclass

xyz.jar

numainclass

Я думаю, что это может быть не редкий вопрос, но я не могу построить строку поиска, которая бы обнаруживала здесь любое предыдущее обсуждение. Было бы неплохо элегантное решение; прямо сейчас я смотрю на подстановку записей '-jar' в вызове getops и разбираю остаток с учетом всех возможных комбинаций. Я работаю над решением в Bash 3.x

Спасибо!

Ответы [ 2 ]

5 голосов
/ 24 ноября 2011

Команда jps , представленная в jdk5, может быть тем, что вы ищете.Используя опции -l и -m, он выведет основной класс pid и аргументы.Добавление -v добавит аргументы vm.

0 голосов
/ 24 ноября 2011

Эта опция перечисляет все Java-файлы, которые в данный момент открыты командой java.Может быть, это полезно для вас.

lsof | grep -E "^java.*(.jar|.class)$" | sed -E "s/\s+/\t/g" | cut -f9

Работает в Debian.

...