Список процессов Java

Как я могу перечислить все процессы Java в bash? Мне нужна командная строка. Я знаю, что есть команда ps, но я не знаю, какие параметры мне нужно использовать.

Ответ 1

попробовать:

ps aux | grep java

и посмотрите, как вы попадаете на

Ответ 3

jps -lV

является наиболее полезным. Печатает только pid и квалифицированное имя основного класса:

2472 com.intellij.idea.Main
11111 sun.tools.jps.Jps
9030 play.server.Server
2752 org.jetbrains.idea.maven.server.RemoteMavenServer

Ответ 4

Вы можете использовать одиночную команду pgrep (не требует использования труб и нескольких команд):

pgrep -fl java

Ответ 5

Начиная с Java 7, самый простой способ и меньше подверженности ошибкам - просто использовать команду jcmd , которая является частью JDK, чтобы она работала так же на всех ОС.

Пример:

> jcmd
5485 sun.tools.jcmd.JCmd
2125 MyProgram

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

Подробнее о как использовать jcmd.

См. также jcmd Утилита

Ответ 6

Это приведет к возврату всех запущенных java-процессов в среде linux. Затем вы можете убить процесс, используя идентификатор процесса.

ps -e|grep java

Ответ 7

Если я хочу просто перечислить java-процессы, используйте:

ps -A | grep java

Ответ 8

ps axuwww | grep java | grep -v grep

Вышеуказанное будет

  • показать вам все процессы с длинными строками (arg: www)
  • filter (grep) только строки, содержащие слово java, и
  • отфильтруйте строку "grep java":)

(Кстати, этот пример не эффективен, но просто запоминается);)

вы можете передать вышеуказанные команды другим командам, например:

ps axuwww | grep java | grep -v grep | sed '.....'  | while read something
do
    something_another $something
done

и т.д...

Ответ 9

Когда я хочу узнать, выполняется ли какой-либо Java-класс, я использую следующую командную строку:

ps ww -f -C java | grep "fully.qualified.name.of.class"

С точки зрения операционной системы имя команды процесса "java". Опция "ww" расширяет максимальные символы colum, поэтому можно grep FQN связанного класса.

Ответ 10

Чтобы узнать список java, запущенный на машине Linux. ps -e | grep java

Ответ 11

Там много способов сделать это. Вы можете использовать java.lang.ProcessBuilder и "pgrep", чтобы получить идентификатор процесса (PID) с чем-то вроде: pgrep -fl java | awk {'print $1'}. Или, если вы работаете под Linux, вы можете запросить каталог /proc.

Я знаю, это кажется ужасным, и не переносимым, и даже плохо реализованным, я согласен. Но поскольку Java фактически работает в VM, по какой-то абсурдной причине, которую я не могу понять после более чем 15 лет работы JDK, почему невозможно увидеть вещи вне пространства JVM, это действительно смешно с вами думаю об этом. Вы можете делать все остальное, даже fork и join дочерние процессы (это был ужасный способ многозадачности, когда мир не знал о потоках или pthreads, что, черт возьми, что происходит с Java?!:).

Это даст огромную дискуссию, которую я знаю, но в любом случае есть очень хороший API, который я уже использовал в своих проектах, и он достаточно стабилен (это OSS, поэтому вам все равно нужно подчеркнуть каждую используемую вами версию, прежде чем доверять API ): https://github.com/jezhumble/javasysmon

JavaDoc: http://jezhumble.github.io/javasysmon/, найдите класс com.jezhumble.javasysmon.OsProcess, она сделает трюк. Надеюсь, это помогло, удачи.

Ответ 12

jps и jcmd не показывали мне никаких результатов, когда я пробовал это, используя openjdk-1.8 на redhat linux. Но даже если бы это было сделано, это показывает только процессы под текущим пользователем, которые не работают в моем случае. Использование ps | grep - это то, что я закончил, но путь класса для некоторых приложений Java может быть чрезвычайно длинным, что делает результаты неразборчивыми, поэтому я использовал sed для его удаления. Это немного грубо, но удаляет все, кроме: PID, User, java-class/jar, args.

ps -o pid,user,cmd -C java | sed -e 's/\([0-9]\+ *[^ ]*\) *[^ ]* *\([^$]*\)/\1 \2/' -e 's/-c[^ ]* [^ ]* \|-[^ ]* //g'

Результаты выглядят примерно так:

  PID USER     CMD
11251 userb org.apache.zookeeper.server.quorum.QuorumPeerMain ../config/zookeeper.properties
19574 userb com.intellij.idea.Main
28807 root org.apache.nifi.bootstrap.RunNiFi run
28829 root org.apache.nifi.NiFi

Альтернативой для окон для отображения всех процессов является:

WMIC path win32_process where "Caption='java.exe'" get ProcessId,Commandline

Но для этого потребуется разбор, чтобы сделать его более понятным.

Ответ 13

Я использую это (хорошо на Debian 8): alias psj='ps --no-headers -ww -C java -o pid,user,start_time,command'

Ответ 14

pgrep -l java
ps -ef | grep java

Ответ 15

ps aux | grep java

или

$ ps -fea|grep -i java

Ответ 16

 ps -eaf | grep [j]ava

Это лучше, так как он покажет вам только активные процессы, не включая эту команду, которая также получила строку java. [] выполняет трюк