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 ps
mais je ne sais pas quels paramètres je dois utiliser.
linux
bash
unix
command-line
Jacek Koralik
la source
la source
ps
essayez d'abord et apprenez-en davantage sur Internet.man ps
info ps
Réponses:
essayer:
et voyez comment vous vous en sortez
la source
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,
la source
est le plus utile. Imprime uniquement le nom de la classe principale pid et qualifié:
la source
Vous pouvez également utiliser une seule commande pgrep (ne vous oblige pas à utiliser des tubes et plusieurs commandes):
la source
À 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:
Plus de détails sur l'utilisation
jcmd
.Voir aussi l'
jcmd
utilitairela source
jps
Pour un meilleur format de sortie, vérifiez cette commande:
la source
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.
la source
ps aux | grep java
ou
$ ps -fea|grep -i java
la source
Si je veux simplement lister les processus java, utilisez:
la source
la source
grep
processus?Ce qui précède
(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:
etc...
la source
Lorsque je veux savoir si une certaine classe Java est en cours d'exécution, j'utilise la ligne de commande suivante:
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.
la source
$ top
donne 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 java
fournit les pièces manquantes du puzzle.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.
Les résultats ressemblent à quelque chose comme:
Une alternative sur Windows pour lister tous les processus est:
Mais cela va nécessiter une analyse pour le rendre plus lisible.
la source
Il existe de nombreuses façons de procéder. Vous pouvez utiliser
java.lang.ProcessBuilder
et « 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/proc
ré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
fork
etjoin
processus 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.la source
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 tourla source
J'utilise ceci (bon sur Debian 8):
alias psj='ps --no-headers -ww -C java -o pid,user,start_time,command'
la source
Pour connaître la liste des java exécutés sur la machine linux. ps -e | grep java
la source