Как я могу перечислить все процессы Java в bash?
Мне нужна командная строка. Я знаю, что есть команда ps
, но я не знаю, какие параметры мне нужно использовать.
Список процессов Java
Ответ 1
попробовать:
ps aux | grep java
и посмотрите, как вы попадаете на
Ответ 2
Недавняя Java-версия оснащена инструментом "jps" для процесса обработки виртуальной машины Java
http://download.oracle.com/javase/1.5.0/docs/tooldocs/share/jps.html
Например,
[[email protected] support]$ jps -m
2120 Main --userdir /home/nsushkin/.netbeans/7.0 --branding nb
26546 charles.jar
17600 Jps -m
Ответ 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. []
выполняет трюк