it-swarm.com.de

Liste der Java Prozesse

Wie kann ich alle Java Prozesse in Bash auflisten? Ich benötige eine Befehlszeile. Ich weiß, dass es den Befehl ps gibt, aber ich weiß nicht, welche Parameter ich verwenden muss.

102
Jacek Koralik

versuchen:

ps aux | grep Java

und sehen, wie Sie sich verstehen

127
Rich

Neueste Java kommt mit Java Virtual Machine Process Status Tool "jps"

http://download.Oracle.com/javase/1.5.0/docs/tooldocs/share/jps.html

Zum Beispiel,

[[email protected] support]$ jps -m
2120 Main --userdir /home/nsushkin/.netbeans/7.0 --branding nb
26546 charles.jar
17600 Jps -m
101
jps -lV

ist am nützlichsten. Gibt nur pid und den qualifizierten Hauptklassennamen aus:

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

Sie können auch einen einzelnen Befehl pgrep verwenden (Sie müssen keine Pipes und mehrere Befehle verwenden):

pgrep -fl Java
26
anubhava

Ausgehend von Java 7 ist es am einfachsten und weniger fehleranfällig, einfach den Befehl jcmd, das Teil des JDK ist, sodass es auf allen Betriebssystemen auf die gleiche Weise funktioniert.

Beispiel:

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

jcmd ermöglicht das Senden von Diagnosebefehlsanforderungen an eine aktive Java Virtual Machine (JVM)).

Weitere Details zu Verwendung von jcmd .

Siehe auch das Dienstprogramm jcmd

24
Nicolas Filotto

Dadurch werden alle ausgeführten Java Prozesse in der Linux-Umgebung zurückgegeben. Anschließend können Sie den Prozess mithilfe der Prozess-ID beenden.

ps -e|grep Java
11
Jude Niroshan

Für ein besseres Ausgabeformat überprüfen Sie diesen Befehl:

ps -fC Java
9
Marcel Bernic

ps aux | grep Java

oder

$ ps -fea|grep -i Java

Wenn ich einfach Java Prozesse auflisten möchte, benutze:

ps -A | grep Java
6
krzysiek.ste
pgrep -l Java
ps -ef | grep Java
4
vaquar khan

Wenn ich wissen möchte, ob eine bestimmte Java Klasse ausgeführt wird, verwende ich die folgende Befehlszeile:

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

Aus Sicht des Betriebssystems lautet der Befehlsname des Prozesses "Java". Die Option "ww" erweitert die maximale Zeichenanzahl der Spalte, sodass die FQN der zugehörigen Klasse abgerufen werden kann.

3
airbjorn
ps axuwww | grep Java | grep -v grep

Das obige wird

  • zeige dir alle Prozesse mit langen Zeilen (arg: www)
  • filtern (grep) nur Zeilen, die das Wort Java enthalten, und
  • filter aus der Zeile "grep Java" :)

(Übrigens ist dieses Beispiel nicht das effektivste, aber einfach zu merken);)

sie können die obigen Anweisungen an andere Befehle weiterleiten, zum Beispiel:

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

usw...

2
jm666

jps & jcmd zeigte mir keine Ergebnisse, als ich es mit openjdk-1.8 unter Red Hat Linux versuchte. Aber selbst wenn dies der Fall ist, werden nur Prozesse unter dem aktuellen Benutzer angezeigt, die in meinem Fall nicht funktionieren. Die Verwendung von ps | grep ist das, was ich letztendlich getan habe, aber der Klassenpfad für einige Java apps kann extrem lang sein, was die Ergebnisse unleserlich macht. Ich habe sed verwendet, um es zu entfernen. Dies ist immer noch ein bisschen rau Entfernt aber alles außer: PID, User, Java-Klasse/jar, args.

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

Die Ergebnisse sehen ungefähr so ​​aus:

  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

Eine Alternative unter Windows zum Auflisten aller Prozesse ist:

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

Aber dazu ist eine Analyse erforderlich, um die Lesbarkeit zu verbessern.

2
Mike

Dafür gibt es viele Möglichkeiten. Sie können Java.lang.ProcessBuilder und "pgrep", um die Prozess-ID (PID) mit etwas wie dem folgenden zu erhalten: pgrep -fl Java | awk {'print $1'}. Oder, wenn Sie unter Linux laufen, können Sie die /proc Verzeichnis.

Ich weiß, das scheint schrecklich und nicht tragbar und sogar schlecht implementiert, da stimme ich zu. Aber weil Java tatsächlich in einer VM läuft, ist es aus irgendeinem absurden Grund, den ich nach mehr als 15 Jahren Arbeit im JDK nicht wirklich herausfinden kann, nicht möglich, Dinge draußen zu sehen Im JVM-Bereich ist es wirklich lächerlich, wenn man darüber nachdenkt. Man kann alles andere tun, sogar fork und join untergeordnete Prozesse (das war eine schreckliche Art von Multitasking, als die Welt es nicht wusste über Threads oder Pthreads , was zur Hölle! Java ?! :).

Dies wird eine immense Diskussion geben, die ich kenne, aber auf jeden Fall gibt es eine sehr gute API, die ich bereits in meinen Projekten verwendet habe und die stabil genug ist ( es ist OSS, sodass Sie immer noch jede verwendete Version auf Stresstest prüfen müssen, bevor Sie der wirklich vertrauen API): https://github.com/jezhumble/javasysmon

JavaDoc: http://jezhumble.github.io/javasysmon/ , suche nach der Klasse com.jezhumble.javasysmon.OsProcess, sie wird den Trick machen. Hoffe es hat geholfen, viel Glück.

1
jbrios777
 ps -eaf | grep [j]ava

Es ist besser, da nur die aktiven Prozesse angezeigt werden, die diesen Befehl nicht enthalten, der auch Java string the [] macht den Trick

1
Ilya Gazman

Ich benutze dies (gut unter Debian 8): alias psj='ps --no-headers -ww -C Java -o pid,user,start_time,command'

0