Daftar proses Java

113

Bagaimana cara mendaftar semua proses Java di bash? Saya butuh baris perintah. Saya tahu ada perintah pstetapi saya tidak tahu parameter apa yang perlu saya gunakan.

Jacek Koralik
sumber
1
tolong tunjukkan sedikit usaha dalam meneliti ini dan menjelaskan masalah Anda, ada banyak kemungkinan tergantung pada apa yang sebenarnya Anda cari.
Mat
3
Jika Anda tahu ada psmaka coba pertama man ps, info psdan pelajari tentang itu di Internet.
ssapkota

Jawaban:

148

mencoba:

ps aux | grep java

dan lihat bagaimana Anda maju

Kaya
sumber
109

Java terbaru hadir dengan Alat Status Proses Mesin Virtual Java "jps"

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

Sebagai contoh,

[nsushkin@fulton support]$ jps -m
2120 Main --userdir /home/nsushkin/.netbeans/7.0 --branding nb
26546 charles.jar
17600 Jps -m
Nicholas Sushkin
sumber
2
Catatan: jps hanya dikirimkan dengan JDK, bukan JRE. Mesin dengan runtime Java biasa tidak akan memiliki alat ini.
aguazales
bagaimana saya bisa menghitung menjalankan proses java?
Jet
50
jps -lV

paling berguna. Mencetak pid dan nama kelas utama yang memenuhi syarat:

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

Anda juga dapat menggunakan perintah tunggal pgrep (tidak mengharuskan Anda menggunakan pipa dan banyak perintah):

pgrep -fl java
anubhava.dll
sumber
27

Mulai dari Java 7 , cara paling sederhana dan tidak terlalu rentan error adalah dengan menggunakan perintah jcmd yang merupakan bagian dari JDK sedemikian rupa sehingga akan bekerja dengan cara yang sama di semua OS.

Contoh:

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

jcmd memungkinkan untuk mengirim permintaan perintah diagnostik ke Java Virtual Machine (JVM) yang sedang berjalan.

Lebih detail tentang cara menggunakanjcmd .

Lihat juga yang jcmdUtilitas

Nicolas Filotto
sumber
1
Wow, itu bahkan lebih baik darijps
Sridhar Sarnobat
15

Untuk format keluaran yang lebih baik periksa perintah ini:

ps -fC java
Marcel Bernic
sumber
Hasil yang bagus dan bersih; persis seperti yang saya cari. Terima kasih!
Charles Naccio
12

Ini akan mengembalikan semua proses java yang berjalan di lingkungan linux. Kemudian Anda dapat menghentikan proses menggunakan ID proses.

ps -e|grep java
Jude Niroshan
sumber
10

ps aux | grep java

atau

$ ps -fea|grep -i java

Shivendra Prakash Shukla
sumber
6

Jika saya hanya ingin membuat daftar proses java, gunakan:

ps -A | grep java
krzysiek.ste
sumber
5
pgrep -l java
ps -ef | grep java
vaquar khan
sumber
5
Terima kasih atas cuplikan kode ini, yang mungkin memberikan bantuan langsung. Penjelasan yang tepat akan sangat meningkatkan nilai pendidikannya dengan menunjukkan mengapa ini adalah solusi yang baik untuk masalah tersebut, dan akan membuatnya lebih berguna bagi pembaca yang akan datang dengan pertanyaan serupa, tetapi tidak identik. Harap edit jawaban Anda untuk menambahkan penjelasan, dan berikan indikasi batasan dan asumsi apa yang berlaku. Secara khusus, mengapa yang kedua tidak menunjukkan grepprosesnya?
Toby Speight
4
ps axuwww | grep java | grep -v grep

Keinginan di atas

  • menunjukkan semua proses dengan garis panjang (arg: www)
  • filter (grep) hanya baris yang berisi kata java, dan
  • filter baris "grep java" :)

(btw, contoh ini bukan yang efektif, tapi mudah diingat);)

Anda dapat menyalurkan perintah di atas ke perintah lain, misalnya:

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

dll ...

jm666
sumber
3

Ketika saya ingin tahu apakah kelas Java tertentu sedang dieksekusi, saya menggunakan baris perintah berikut:

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

Dari tampilan sisi OS, nama perintah prosesnya adalah "java". Opsi "ww" memperluas karakter maksimum kolom, jadi dimungkinkan untuk melakukan grep FQN dari kelas terkait.

airbjorn.dll
sumber
Inilah yang saya cari - $ tophanya memberikan "java" sebagai perintah yang tidak terlalu membantu ketika mencoba untuk mencari tahu proses mana yang memonopoli cpu. $ ps ww -fC javamemberikan potongan teka-teki yang hilang.
David Clarke
2

jps & jcmd tidak menunjukkan hasil apa pun ketika saya mencobanya menggunakan openjdk-1.8 di redhat linux. Tetapi bahkan jika itu melakukannya, itu hanya menunjukkan proses di bawah pengguna saat ini yang tidak berfungsi dalam kasus saya. Menggunakan ps | grep adalah apa yang akhirnya saya lakukan tetapi jalur kelas untuk beberapa aplikasi java bisa sangat panjang yang membuat hasil tidak terbaca jadi saya menggunakan sed untuk menghapusnya. Ini masih agak kasar tetapi menghapus semuanya kecuali: PID, User, java-class / jar, args.

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

Hasilnya terlihat seperti ini:

  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

Alternatif di windows untuk mencantumkan semua proses adalah:

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

Tapi itu akan membutuhkan beberapa penguraian agar lebih terbaca.

Mike
sumber
1

Ada banyak cara untuk melakukan ini. Anda dapat menggunakan java.lang.ProcessBuilderdan "pgrep" untuk mendapatkan proses id (PID) dengan sesuatu seperti: pgrep -fl java | awk {'print $1'}. Atau, jika Anda menjalankan di Linux, Anda dapat meminta /procdirektori.

Saya tahu, ini tampaknya mengerikan, dan tidak portabel, dan bahkan diterapkan dengan buruk, saya setuju. Tetapi karena Java benar-benar berjalan dalam VM, untuk beberapa alasan tidak masuk akal yang tidak dapat saya ketahui setelah lebih dari 15 tahun mengerjakan JDK, itulah mengapa tidak mungkin untuk melihat hal-hal di luar ruang JVM, itu benar-benar konyol bagi Anda Pikirkan tentang itu. Anda dapat melakukan yang lainnya, bahkan forkdan joinproses anak (itu adalah cara yang mengerikan untuk multitasking ketika dunia tidak tahu tentang utas atau pthreads , apa sih! Apa yang terjadi dengan Java ?! :).

Ini akan memberikan diskusi besar yang saya tahu, tetapi bagaimanapun, ada API yang sangat bagus yang sudah saya gunakan dalam proyek saya dan itu cukup stabil ( ini OSS jadi Anda masih perlu menekankan uji setiap versi yang Anda gunakan sebelum benar-benar mempercayai API ): https : //github.com/jezhumble/javasysmon

JavaDoc: http://jezhumble.github.io/javasysmon/ , cari kelasnya com.jezhumble.javasysmon.OsProcess, dia akan melakukan triknya. Semoga membantu, semoga berhasil.

jbrios777
sumber
1
 ps -eaf | grep [j]ava

Ini lebih baik karena ini hanya akan menampilkan proses aktif tidak termasuk perintah ini yang juga mendapat string java yang []melakukan trik

Ilya Gazman
sumber
itu harus ps -eaf | grep Java bukan [j] ava
vaquar khan
@vaquarkhan bung hanya mencoba untuk menjalankan kedua saran Anda dan saya dan melihat apa perbedaannya, mereka berdua akan bekerja
Ilya Gazman
Keduanya memberikan hasil yang sama namun [j] ava membingungkan
vaquar khan
0

Saya menggunakan ini (bagus di Debian 8): alias psj='ps --no-headers -ww -C java -o pid,user,start_time,command'

Laurent Caillette
sumber
-1

Untuk mengetahui daftar java yang berjalan di mesin linux. ps -e | grep java

kiran jallepalli
sumber