Java işlemlerinin listesi


113

Bash'de tüm Java işlemlerini nasıl listeleyebilirim? Bir komut satırına ihtiyacım var. Komut olduğunu biliyorum psama hangi parametreleri kullanmam gerektiğini bilmiyorum.


1
lütfen bunu araştırmak ve probleminizi tanımlamak için biraz daha çaba gösterin, tam olarak neyin peşinde olduğunuza bağlı olarak birçok olasılık vardır.
Mat

3
Orada olduğunu biliyorsanız pso zaman ilk denemede man ps, info psve internette bu konuda öğrenirler.
ssapkota

Yanıtlar:


148

Deneyin:

ps aux | grep java

ve nasıl geçtiğini gör


109

En son Java, Java Virtual Machine Process Status Tool "jps" ile birlikte gelir

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

Örneğin,

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

2
Sadece bir not: jps, JRE ile değil, yalnızca JDK ile birlikte gönderilir. Düz Java çalışma zamanları olan makinelerde bu araç bulunmaz.
aguazales

java işleminin yalnızca sayısını nasıl öğrenebilirim?
Jet

50
jps -lV

en kullanışlıdır. Yalnızca pid ve nitelikli ana sınıf adını yazdırır:

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

31

Tek komut pgrep'i de kullanabilirsiniz (borular ve birden çok komut kullanmanızı gerektirmez):

pgrep -fl java

27

Java 7'den başlayarak , en basit yol ve daha az hata eğilimi, jcmd JDK'nın parçası olan komutu , tüm işletim sistemlerinde aynı şekilde çalışacak şekilde kullanmaktır.

Misal:

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

jcmd çalışan bir Java Sanal Makinesi'ne (JVM) tanılama komut istekleri göndermeye izin verir.

Nasıl kullanılacağıjcmd hakkında daha fazla ayrıntı .

Ayrıca bkz Utilityjcmd


1
Vay canına, bu daha da iyijps
Sridhar Sarnobat

15

Daha iyi çıktı formatı için şu komutu kontrol edin:

ps -fC java

Temiz bir çıktı güzel; tam olarak aradığım şey. Teşekkürler!
Charles Naccio

12

Bu, Linux ortamında çalışan tüm java işlemlerini döndürecektir. Ardından işlem kimliğini kullanarak işlemi sonlandırabilirsiniz.

ps -e|grep java


6

Sadece java işlemlerini listelemek istersem, şunu kullanın:

ps -A | grep java

5
pgrep -l java
ps -ef | grep java

5
Hemen yardımcı olabilecek bu kod parçacığı için teşekkür ederiz. Uygun bir açıklama , bunun neden soruna iyi bir çözüm olduğunu göstererek eğitimsel değerini büyük ölçüde artıracak ve benzer, ancak aynı olmayan sorulara sahip gelecekteki okuyucular için daha yararlı hale getirecektir. Lütfen açıklama eklemek için cevabınızı düzenleyin ve hangi sınırlamaların ve varsayımların geçerli olduğuna dair bir gösterge verin. Özellikle, ikincisi neden grepsüreci göstermiyor?
Toby Speight

4
ps axuwww | grep java | grep -v grep

Yukarıdakiler

  • size tüm süreçleri uzun satırlarla gösterir (arg: www)
  • filter (grep) yalnızca java kelimesini içeren satırları ve
  • "grep java" satırını filtreleyin :)

(btw, bu örnek etkili olan değil, hatırlaması basit);)

Yukarıdakileri başka bir komuta yönlendirebilirsiniz, örneğin:

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

vb...


3

Belirli bir Java sınıfının çalıştırılıp çalıştırılmadığını öğrenmek istediğimde, aşağıdaki komut satırını kullanıyorum:

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

İşletim sistemi yan görünümünden, işlemin komut adı "java" dır. "Ww" seçeneği sütunun maksimum karakterlerini genişletir, böylece ilgili sınıfın FQN'sini büyütmek mümkündür.


Bu benim aradığım şeydi - $ topsadece komut olarak "java" yı veriyor, bu da hangi işlemin cpu'yu işgal ettiğini anlamaya çalışırken pek yardımcı olmuyor. $ ps ww -fC javabulmacanın eksik parçalarını sağlar.
David Clarke

2

redhat linux üzerinde openjdk-1.8 kullanarak denediğimde jps & jcmd bana hiçbir sonuç göstermiyordu. Ancak yapsa bile, yalnızca benim durumumda çalışmayan mevcut kullanıcının altındaki işlemleri gösterir. Yaptığım şey ps | grep'i kullanmaktı, ancak bazı java uygulamaları için sınıf yolu aşırı uzun olabilir, bu da sonuçları okunaksız hale getirir, bu yüzden kaldırmak için sed kullandım. Bu biraz kaba ama yine de PID, Kullanıcı, java sınıfı / jar, args dışında her şeyi kaldırıyor.

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

Sonuçlar şuna benzer:

  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

Windows'ta tüm işlemleri listelemek için bir alternatif:

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

Ancak bunun daha okunaklı olması için biraz ayrıştırılması gerekecek.


1

Bunu yapmanın birçok yolu var. Sen kullanabilirsiniz java.lang.ProcessBuildergibi bir şeyle işlem kimliği (PID) almak ve "pgrep": pgrep -fl java | awk {'print $1'}. Veya Linux altında çalışıyorsanız, /procdizini sorgulayabilirsiniz .

Biliyorum, bu korkunç görünüyor ve taşınabilir değil ve hatta kötü uygulandı, katılıyorum. Ancak Java aslında bir sanal makinede çalıştığı için, JDK'da 15 yıldan fazla çalıştıktan sonra gerçekten anlayamadığım bazı saçma nedenlerden dolayı, JVM alanının dışındaki şeyleri görmenin neden mümkün olmadığı, sizin için gerçekten saçma bunu düşün. Her şeyi yapabilirsin, hattafork ve joinçocuk süreçler (bu dünyada bilmiyordu zaman çoklu görev bir kötü bir yol olduğunu parçacığı veya pthreads bir cehennem! Ne Java ile ilgili de neler olup bittiğini, ?! :).

Bu bildiğim muazzam bir tartışma verecek, ama her neyse, projelerimde zaten kullandığım çok iyi bir API var ve yeterince kararlı ( OSS, bu nedenle API'ye gerçekten güvenmeden önce kullandığınız her sürümü stres test etmeniz gerekiyor ): https : //github.com/jezhumble/javasysmon

JavaDoc: http://jezhumble.github.io/javasysmon/ , sınıfı arayın com.jezhumble.javasysmon.OsProcess, hile yapacak. Umarım yardımcı olmuştur, iyi şanslar.


1
 ps -eaf | grep [j]ava

Size sadece bu komutu içermeyen aktif işlemleri göstereceği için daha iyidir, aynı zamanda java dizesini de içerir [], hile yapar


ps -eaf olmalıdır | grep Java not [j] ava
vaquar khan

@vaquarkhan dostum sadece ikisi senin ve maden önerileri çalıştırmak ve fark, ikisi de çalışacaktır ne olduğunu görmek için denemek
Ilya gazman

Her ikisi de aynı sonuçları veriyor ancak [j] ava kafa karıştırıcı
vaquar khan

0

Bunu kullanıyorum (Debian 8'de iyi): alias psj='ps --no-headers -ww -C java -o pid,user,start_time,command'


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.