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.


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


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

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

31

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

pgrep -fl java

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


1
Wow, itu bahkan lebih baik darijps
Sridhar Sarnobat

15

Untuk format keluaran yang lebih baik periksa perintah ini:

ps -fC java

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


6

Jika saya hanya ingin membuat daftar proses java, gunakan:

ps -A | grep java

5
pgrep -l java
ps -ef | grep java

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 ...


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.


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.


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.


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


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'


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.