Elenco dei processi Java


113

Come posso elencare tutti i processi Java in bash? Ho bisogno di una riga di comando. So che esiste un comando psma non so quali parametri devo usare.


1
per favore mostra un po 'più di impegno nella ricerca di questo e nella descrizione del tuo problema, ci sono molte possibilità a seconda di cosa stai cercando esattamente.
— Mat

3
Se sai che c'è , psprova prima e impara a conoscerlo su Internet. man psinfo ps
— ssapkota

Risposte:


148

provare:

ps aux | grep java

e guarda come vai avanti


109

Java recente viene fornito con Java Virtual Machine Process Status Tool "jps"

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

Per esempio,

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

2
Solo una nota: jps viene fornito solo con JDK, non con JRE. Le macchine con semplici runtime Java su di esse non avranno questo strumento.
— aguazales

come posso ottenere solo il conteggio dell'esecuzione del processo Java?
— Jet

50
jps -lV

è molto utile. Stampa solo pid e il nome della classe principale qualificato:

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

31

Puoi anche usare il comando singolo pgrep (non richiede l'uso di pipe e comandi multipli):

pgrep -fl java

27

A partire da Java 7 , il modo più semplice e meno soggetto a errori è semplicemente utilizzare il comando jcmd che fa parte del JDK in modo che funzioni allo stesso modo su tutti i sistemi operativi.

Esempio:

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

jcmd consente di inviare richieste di comandi diagnostici a una JVM (Java Virtual Machine) in esecuzione.

Maggiori dettagli su come utilizzarejcmd .

Vedi anche l' jcmdutilità


1
Wow, è anche meglio dijps
— Sridhar Sarnobat

15

Per un migliore formato di output controlla questo comando:

ps -fC java

Bello un risultato pulito; esattamente quello che stavo cercando. Grazie!
— Charles Naccio

12

Questo restituirà tutti i processi java in esecuzione in ambiente Linux. Quindi puoi terminare il processo utilizzando l'ID del processo.

ps -e|grep java


6

Se voglio semplicemente elencare i processi java, usa:

ps -A | grep java

5
pgrep -l java
ps -ef | grep java

5
Grazie per questo snippet di codice, che potrebbe fornire un aiuto immediato. Una spiegazione adeguata migliorerebbe notevolmente il suo valore educativo mostrando perché questa è una buona soluzione al problema e la renderebbe più utile ai futuri lettori con domande simili, ma non identiche. Si prega di modificare la risposta di aggiungere una spiegazione, e dare un'indicazione di ciò si applicano le limitazioni e le assunzioni. In particolare, perché il secondo di questi non mostra il grepprocesso?
— Toby Speight

4
ps axuwww | grep java | grep -v grep

Quanto sopra lo farà

  • mostra tutti i processi con lunghe code (arg: www)
  • filter (grep) solo le righe che contengono la parola java e
  • filtra la riga "grep java" :)

(btw, questo esempio non è quello efficace, ma semplice da ricordare);)

puoi reindirizzare quanto sopra ad altri comandi, ad esempio:

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

eccetera...


3

Quando voglio sapere se una determinata classe Java viene eseguita, utilizzo la seguente riga di comando:

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

Dalla vista laterale del sistema operativo, il nome del comando del processo è "java". L'opzione "ww" amplia il numero massimo di caratteri della colonna, quindi è possibile grep il FQN della relativa classe.


Questo è quello che stavo cercando - $ topdà solo "java" come comando che non è molto utile quando si cerca di capire quale processo sta monopolizzando la CPU. $ ps ww -fC javafornisce i pezzi mancanti del puzzle.
— David Clarke

2

jps e jcmd non mi mostravano alcun risultato quando l'ho provato usando openjdk-1.8 su redhat linux. Ma anche se lo facesse, mostra solo i processi sotto l'utente corrente che non funziona nel mio caso. L'utilizzo di ps | grep è quello che ho finito per fare, ma il percorso di classe per alcune app java può essere estremamente lungo, il che rende i risultati illeggibili, quindi ho usato sed per rimuoverlo. Questo è ancora un po 'approssimativo ma rimuove tutto tranne: PID, User, java-class / jar, args.

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

I risultati assomigliano a:

  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

Un'alternativa su Windows per elencare tutti i processi è:

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

Ma sarà necessario un po 'di analisi per renderlo più leggibile.


1

Ci sono molti modi per farlo. È possibile utilizzare java.lang.ProcessBuildere "pgrep" per ottenere l'ID di processo (PID) con qualcosa come: pgrep -fl java | awk {'print $1'}. Oppure, se stai utilizzando Linux, puoi interrogare la /procdirectory.

Lo so, questo sembra orribile e non portatile e anche mal implementato, sono d'accordo. Ma poiché Java in realtà viene eseguito in una VM, per qualche motivo assurdo che non riesco davvero a capire dopo più di 15 anni di lavoro con JDK, è perché non è possibile vedere le cose al di fuori dello spazio JVM, è davvero ridicolo con te pensaci. Si può fare tutto il resto, anche forke joinprocessi figli (quelli erano un modo orribile di multitasking in cui il mondo non sapeva discussioni o pthreads , che inferno! Che cosa sta succedendo in su con Java ?! :).

Questo darà una discussione immensa, lo so, ma comunque c'è un'ottima API che ho già usato nei miei progetti ed è abbastanza stabile ( è OSS quindi devi ancora testare ogni versione che usi prima di fidarti davvero dell'API ): https : //github.com/jezhumble/javasysmon

JavaDoc: http://jezhumble.github.io/javasysmon/ , cerca la classe com.jezhumble.javasysmon.OsProcess, lei farà il trucco. Spero sia stato d'aiuto, buona fortuna.


1
 ps -eaf | grep [j]ava

È meglio poiché ti mostrerà solo i processi attivi escluso questo comando che ha anche una stringa java che []fa il trucco


dovrebbe essere ps -eaf | grep Java non [j] ava
— vaquar khan

@vaquarkhan tizio prova a eseguire sia i tuoi che i miei suggerimenti e vedi qual è la differenza, entrambi funzioneranno
— Ilya Gazman

Entrambi danno gli stessi risultati, tuttavia [j] ava è
— fonte di

0

Lo uso (buono su Debian 8): alias psj='ps --no-headers -ww -C java -o pid,user,start_time,command'


-1

Per conoscere l'elenco dei java in esecuzione sulla macchina Linux. ps -e | grep java

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.