Wie kann ich alle Java-Prozesse in bash auflisten? Ich brauche eine Kommandozeile. Ich weiß, dass es einen Befehl gibt, ps
aber ich weiß nicht, welche Parameter ich verwenden muss.
linux
bash
unix
command-line
Jacek Koralik
quelle
quelle
ps
dann zuerst versuchenman ps
,info ps
und über sie im Internet lernen.Antworten:
Versuchen:
und sehen, wie es dir geht
quelle
Neuere Java wird mit dem Java Virtual Machine Process Status Tool "jps" geliefert.
http://download.oracle.com/javase/1.5.0/docs/tooldocs/share/jps.html
Beispielsweise,
quelle
ist am nützlichsten. Druckt nur pid und qualifizierten Hauptklassennamen:
quelle
Sie können auch einen einzelnen Befehl pgrep verwenden (Sie müssen keine Pipes und mehrere Befehle verwenden):
quelle
Ab Java 7 besteht der einfachste und weniger fehleranfällige Weg darin, einfach den Befehl zu verwenden
jcmd
, der Teil des JDK ist , sodass er auf allen Betriebssystemen auf die gleiche Weise funktioniert.Beispiel:
Weitere Details zur Verwendung
jcmd
.Siehe auch das
jcmd
Dienstprogrammquelle
jps
Überprüfen Sie für ein besseres Ausgabeformat diesen Befehl:
quelle
Dadurch werden alle laufenden Java-Prozesse in der Linux-Umgebung zurückgegeben. Anschließend können Sie den Prozess mithilfe der Prozess-ID beenden.
quelle
ps aux | grep java
oder
$ ps -fea|grep -i java
quelle
Wenn ich einfach Java-Prozesse auflisten möchte, verwenden Sie:
quelle
quelle
grep
Prozess?Das obige wird
(Übrigens ist dieses Beispiel nicht das effektive, aber einfach zu merken);)
Sie können das oben Gesagte an andere Befehle weiterleiten, zum Beispiel:
etc...
quelle
Wenn ich wissen möchte, ob eine bestimmte Java-Klasse ausgeführt wird, verwende ich die folgende Befehlszeile:
In der Seitenansicht des Betriebssystems lautet der Befehlsname des Prozesses "Java". Die Option "ww" erweitert die maximale Anzahl der Zeichen in der Spalte, sodass der FQN der zugehörigen Klasse erfasst werden kann.
quelle
$ top
gibt nur "Java" als Befehl an, was nicht allzu hilfreich ist, wenn man herausfinden will, welcher Prozess die CPU belastet.$ ps ww -fC java
liefert die fehlenden Teile des Puzzles.jps & jcmd zeigte mir keine Ergebnisse, als ich es mit openjdk-1.8 unter redhat linux versuchte. Aber selbst wenn dies der Fall wäre, werden nur Prozesse unter dem aktuellen Benutzer angezeigt, was in meinem Fall nicht funktioniert. Am Ende habe ich ps | grep verwendet, aber der Klassenpfad für einige Java-Apps kann extrem lang sein, wodurch die Ergebnisse unleserlich werden. Deshalb habe ich sed verwendet, um sie zu entfernen. Dies ist immer noch etwas rau, entfernt aber alles außer: PID, User, Java-Klasse / JAR, Argumente.
Die Ergebnisse sehen ungefähr so aus:
Eine Alternative unter Windows zum Auflisten aller Prozesse ist:
Aber das muss analysiert werden, damit es besser lesbar ist.
quelle
Es gibt viele Möglichkeiten, dies zu tun. Sie können
java.lang.ProcessBuilder
und "pgrep" verwenden, um die Prozess-ID (PID) mit etwas wie: zu erhaltenpgrep -fl java | awk {'print $1'}
. Wenn Sie unter Linux arbeiten, können Sie das/proc
Verzeichnis auch abfragen .Ich weiß, das scheint schrecklich und nicht portabel und sogar schlecht implementiert, da stimme ich zu. Aber weil Java tatsächlich in einer VM läuft, aus irgendeinem absurden Grund, den ich nach mehr als 15 Jahren Arbeit im JDK nicht wirklich herausfinden kann, ist es für Sie wirklich lächerlich, Dinge außerhalb des JVM-Bereichs zu sehen Denk darüber nach. Sie können alles andere tun, auch
fork
undjoin
untergeordnete Prozesse (das war eine schreckliche Art des Multitasking, als die Welt nichts über Threads oder Pthreads wusste , was zum Teufel! Was ist mit Java los?! :).Dies wird eine immense Diskussion geben, die ich kenne, aber es gibt trotzdem eine sehr gute API, die ich bereits in meinen Projekten verwendet habe und die stabil genug ist ( es ist OSS, so dass Sie immer noch jede Version testen müssen, die Sie verwenden, bevor Sie der API wirklich vertrauen ): 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.quelle
Es ist besser, da es nur die aktiven Prozesse anzeigt, die diesen Befehl nicht enthalten, der auch Java-Zeichenfolgen
[]
enthält, die den Trick ausführenquelle
Ich benutze dies (gut auf Debian 8):
alias psj='ps --no-headers -ww -C java -o pid,user,start_time,command'
quelle
Um die Liste von Java zu kennen, die auf dem Linux-Computer ausgeführt wird. ps -e | grep java
quelle