web-dev-qa-db-fra.com

Liste de Java processus

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

102
Jacek Koralik

essayer:

ps aux | grep Java

et voyez comment vous vous en sortez

127
Rich

Les récents Java sont fournis avec Java Outil d'état du processus de la machine virtuelle "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
101
Nicholas Sushkin
jps -lV

est le plus utile. Imprime juste le nom principal et qualifié de la classe:

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

Vous pouvez également utiliser la commande unique pgrep (vous n'avez pas besoin d'utiliser de canaux ni de commandes multiples):

pgrep -fl Java
26
anubhava

À partir de Java 7 , le moyen le plus simple et le moins sujet aux erreurs consiste à utiliser simplement la commande jcmd qui fait partie du JDK de sorte que cela 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 demandes de commande de diagnostic à une machine virtuelle (JVM) Java en cours d'exécution.

Plus de détails sur comment utiliser jcmd .

Voir aussi l'utilitaire jcmd

24
Nicolas Filotto

Ceci renverra tous les processus Java en cours d'exécution dans l'environnement Linux. Ensuite, vous pouvez tuer le processus en utilisant l'ID de processus.

ps -e|grep Java
11
Jude Niroshan

Pour un meilleur format de sortie, vérifiez cette commande:

ps -fC Java
9
Marcel Bernic

ps aux | grep Java

ou

$ ps -fea|grep -i Java

Si je veux simplement lister les processus Java, utilisez:

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

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 maximal de caractères de la colonne, de sorte qu'il est possible de grep le FQN de la classe associée.

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

La volonté ci-dessus

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

(d'ailleurs, cet exemple n'est pas efficace, mais simple à retenir);)

vous pouvez diriger ce qui précède vers d'autres commandes, par exemple:

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

etc...

2
jm666

jps & jcmd ne m'a montré aucun résultat lorsque je l'ai essayé en utilisant openjdk-1.8 sur linux redhat. Mais même s’il le faisait, il ne montre que les processus de l’utilisateur actuel qui ne fonctionnent pas dans mon cas. J'ai fini par utiliser ps | grep, mais le chemin d'accès aux classes de certaines applications Java peut être extrêmement long, ce qui rend les résultats illisibles. J'ai donc utilisé sed pour le supprimer. Ceci est encore un peu approximatif mais supprime tout sauf les éléments suivants: PID, utilisateur, classe Java/jar, arguments.

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 il faudra un peu d’analyse pour le rendre plus lisible.

2
Mike

Il y a beaucoup de façons de faire cela. Vous pouvez utiliser Java.lang.ProcessBuilder et "pgrep" pour obtenir l'ID de processus (PID) avec quelque chose comme: pgrep -fl Java | awk {'print $1'}. Ou, si vous utilisez Linux, vous pouvez interroger le répertoire /proc.

Je sais, cela semble horrible, et non portable, et même mal mis en œuvre, je suis d’accord. Mais parce que Java fonctionne réellement sur une machine virtuelle, pour une raison absurde que je ne puisse vraiment pas comprendre après plus de 15 ans d'utilisation du JDK, c'est pourquoi il est impossible de voir des éléments en dehors de l'espace JVM. C'est vraiment ridicule d'y penser. Vous pouvez faire tout le reste, même les processus fork et join (ceux-ci étaient une horrible méthode multitâche lorsque le monde ne connaissait pas les threads ou pthreads , qu'est-ce qui se passe avec Java?! :).

Cela va donner une immense discussion, je le sais, mais de toute façon, il y a une très bonne API que j'ai déjà utilisée dans mes projets et qui est suffisamment stable (, c'est un logiciel libre; vous devez donc toujours tester toutes les versions que vous utilisiez auparavant 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 ça vous a aidé, bonne chance.

1
jbrios777
 ps -eaf | grep [j]ava

C'est mieux car il ne vous montrera que les processus actifs ne comprenant pas cette commande qui a également eu Java chaîne le [] fait l'affaire

1
Ilya Gazman

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

0