risposta-alla-domanda-sullo-sviluppo-web-bd.com

Elenco di Java processi

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

95
Jacek Koralik

provare:

ps aux | grep Java

e vedi come vai avanti

121
Rich

Recente Java viene fornito con Java Strumento di stato del processo della macchina virtuale "jps"

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

Per esempio,

[[email protected] support]$ jps -m
2120 Main --userdir /home/nsushkin/.netbeans/7.0 --branding nb
26546 charles.jar
17600 Jps -m
98
jps -lV

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

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

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

pgrep -fl Java
25
anubhava

A partire da Java 7 , il modo più semplice e meno soggetto a errori è semplicemente usare il comando jcmd che fa parte del JDK in modo tale 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 di diagnostica a una macchina virtuale (JVM) Javain esecuzione.

Maggiori dettagli su come usare jcmd .

Vedi anche l'utilità jcmd

24
Nicolas Filotto

Ciò restituirà tutti i processi Java in esecuzione in ambiente Linux. Quindi è possibile interrompere il processo utilizzando l'ID processo.

ps -e|grep Java
11
Jude Niroshan

Per un migliore formato di output selezionare questo comando:

ps -fC Java
8
Marcel Bernic

ps aux | grep Java

o

$ ps -fea|grep -i Java

Se voglio semplicemente elencare Java processi, usare:

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

Quanto sopra

  • mostra tutti i processi con linee lunghe (arg: www)
  • filter (grep) allinea solo le righe che contengono Word Java e
  • filtra la riga "grep Java" :)

(a proposito, questo esempio non è 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...

2
jm666

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" allarga i caratteri massimi della colonna, quindi è possibile greppare l'FQN della classe correlata.

2
airbjorn

jps & 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 funzionano nel mio caso. L'uso 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, Utente, 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.

2
Mike

Ci sono molti modi per farlo. È possibile utilizzare Java.lang.ProcessBuilder e "pgrep" per ottenere l'ID processo (PID) con qualcosa del tipo: pgrep -fl Java | awk {'print $1'}. Oppure, se si esegue su Linux, è possibile eseguire una query nella directory /proc.

Lo so, questo sembra orribile, non portatile e persino mal implementato, sono d'accordo. Ma poiché Java funziona effettivamente in una VM, per qualche assurda ragione che non riesco davvero a capire dopo più di 15 anni di lavoro su JDK, è per questo che non è possibile vedere cose al di fuori dello spazio JVM , è davvero ridicolo se ci pensi. Puoi fare tutto il resto, anche i processi figlio fork e join (quelli erano un modo orribile di multitasking quando il mondo non era a conoscenza di thread o pthreads , che diavolo! che succede con Java ?! :).

Questo darà una discussione immensa che conosco, ma comunque, c'è un'API molto buona che ho già usato nei miei progetti ed è abbastanza stabile ( è OSS, quindi devi ancora sottoporre a stress test ogni versione che usi prima fidarsi davvero dell'API ): https://github.com/jezhumble/javasysmon

JavaDoc: http://jezhumble.github.io/javasysmon/ , cerca la classe com.jezhumble.javasysmon.OsProcess, farà il trucco. Spero che abbia aiutato, buona fortuna.

1
jbrios777
 ps -eaf | grep [j]ava

È meglio poiché ti mostrerà solo i processi attivi che non includono questo comando che ha anche Java stringa il [] fa il trucco

1
Ilya Gazman

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

0