Liste des processus Java


113

Comment puis-je lister tous les processus Java dans bash? J'ai besoin d'une ligne de commande. Je sais qu'il y a une commande psmais je ne sais pas quels paramètres je dois utiliser.


1
s'il vous plaît montrer un peu plus d'efforts dans la recherche et la description de votre problème, il y a beaucoup de possibilités en fonction de ce que vous recherchez exactement.
Mat

3
Si vous savez qu'il y en a , psessayez d'abord et apprenez-en davantage sur Internet. man psinfo ps
ssapkota

Réponses:


148

essayer:

ps aux | grep java

et voyez comment vous vous en sortez


109

Java récent est fourni avec l'outil d'état des processus de la machine virtuelle Java "jps"

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

Par exemple,

[nsushkin@fulton support]$ jps -m
2120 Main --userdir /home/nsushkin/.netbeans/7.0 --branding nb
26546 charles.jar
17600 Jps -m

2
Juste une note: jps est livré uniquement avec le JDK, pas le JRE. Les machines avec de simples environnements d'exécution Java n'auront pas cet outil.
aguazales

comment puis-je obtenir juste le nombre de processus java en cours d'exécution?
Jet le

50
jps -lV

est le plus utile. Imprime uniquement le nom de la classe principale pid et qualifié:

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

31

Vous pouvez également utiliser une seule commande pgrep (ne vous oblige pas à utiliser des tubes et plusieurs commandes):

pgrep -fl java

27

À partir de Java 7 , le moyen le plus simple et le moins sujet aux erreurs est d'utiliser simplement la commande jcmd qui fait partie du JDK pour qu'elle fonctionne de la même manière sur tous les systèmes d'exploitation.

Exemple:

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

jcmd permet d'envoyer des requêtes de commande de diagnostic à une machine virtuelle Java (JVM) en cours d'exécution.

Plus de détails sur l'utilisationjcmd .

Voir aussi l' jcmdutilitaire


1
Wow, c'est encore mieux quejps
Sridhar Sarnobat


12

Cela retournera tous les processus java en cours d'exécution dans l'environnement linux. Ensuite, vous pouvez arrêter le processus à l'aide de l'ID de processus.

ps -e|grep java


6

Si je veux simplement lister les processus java, utilisez:

ps -A | grep java

5
pgrep -l java
ps -ef | grep java

5
Merci pour cet extrait de code, qui peut fournir une aide immédiate. Une explication appropriée améliorerait considérablement sa valeur éducative en montrant pourquoi c'est une bonne solution au problème, et la rendrait plus utile aux futurs lecteurs avec des questions similaires, mais pas identiques. Veuillez modifier votre réponse pour ajouter une explication et donner une indication des limitations et hypothèses applicables. En particulier, pourquoi le deuxième de ceux-ci ne montre-t-il pas le grepprocessus?
Toby Speight

4
ps axuwww | grep java | grep -v grep

Ce qui précède

  • vous montrer tous les processus avec de longues lignes (arg: www)
  • filter (grep) uniquement les lignes contenant le mot java, et
  • filtrez la ligne "grep java" :)

(btw, cet exemple n'est pas le plus efficace, mais simple à retenir);)

vous pouvez diriger ce qui précède vers une autre commande, par exemple:

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

etc...


3

Lorsque je veux savoir si une certaine classe Java est en cours d'exécution, j'utilise la ligne de commande suivante:

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

Dans la vue latérale du système d'exploitation, le nom de la commande du processus est "java". L'option "ww" élargit le nombre maximum de caractères de la colonne, il est donc possible de grep le FQN de la classe associée.


C'est ce que je cherchais - $ topdonne juste "java" comme commande, ce qui n'est pas très utile pour essayer de déterminer quel processus monopolise le processeur. $ ps ww -fC javafournit les pièces manquantes du puzzle.
David Clarke

2

jps & jcmd ne me montrait aucun résultat lorsque je l'ai essayé en utilisant openjdk-1.8 sur redhat linux. Mais même si c'est le cas, cela ne montre que les processus sous l'utilisateur actuel, ce qui ne fonctionne pas dans mon cas. J'ai fini par utiliser ps | grep, mais le chemin de classe pour certaines applications java peut être extrêmement long, ce qui rend les résultats illisibles, j'ai donc utilisé sed pour le supprimer. C'est encore un peu difficile mais supprime tout sauf: PID, User, java-class / jar, args.

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

Les résultats ressemblent à quelque chose comme:

  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

Une alternative sur Windows pour lister tous les processus est:

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

Mais cela va nécessiter une analyse pour le rendre plus lisible.


1

Il existe de nombreuses façons de procéder. Vous pouvez utiliser java.lang.ProcessBuilderet « pgrep » pour obtenir le numéro de processus (PID) avec quelque chose comme: pgrep -fl java | awk {'print $1'}. Ou, si vous utilisez Linux, vous pouvez interroger le /procrépertoire.

Je sais, cela semble horrible, et non portable, et même mal implémenté, je suis d'accord. Mais parce que Java fonctionne réellement dans une VM, pour une raison absurde que je ne peux pas vraiment comprendre après plus de 15 ans de travail sur le JDK, c'est pourquoi il n'est pas possible de voir des choses en dehors de l'espace JVM, c'est vraiment ridicule avec vous Pensez-y. Vous pouvez le faire tout le reste, même forket joinprocessus enfants (c'était une façon horrible de multi - tâches quand le monde ne connaissait pas les discussions ou pthreads , quel enfer! Ce qui se passe dans le Java ?! :).

Cela donnera une immense discussion que je connais, mais de toute façon, il y a une très bonne API que j'ai déjà utilisée dans mes projets et elle est suffisamment stable ( c'est OSS donc vous devez encore stresser chaque version que vous utilisez avant de vraiment faire confiance à l'API ): https : //github.com/jezhumble/javasysmon

JavaDoc: http://jezhumble.github.io/javasysmon/ , recherchez la classe com.jezhumble.javasysmon.OsProcess, elle fera l'affaire. J'espère que cela a aidé, bonne chance.


1
 ps -eaf | grep [j]ava

C'est mieux car il ne vous montrera que les processus actifs sans inclure cette commande qui a également une chaîne java, le []fait le tour


il devrait être ps -eaf | grep Java not [j] ava
vaquar khan

@vaquarkhan mec essayez juste d'exécuter les vôtres et les miennes suggestions et voyez quelle est la différence, elles fonctionneront toutes les deux
Ilya Gazman

Les deux donnent les mêmes résultats mais [j] ava est déroutant
vaquar khan

0

J'utilise ceci (bon sur Debian 8): alias psj='ps --no-headers -ww -C java -o pid,user,start_time,command'


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.