Bagaimana cara mendaftar semua proses Java di bash? Saya butuh baris perintah. Saya tahu ada perintah ps
tetapi saya tidak tahu parameter apa yang perlu saya gunakan.
linux
bash
unix
command-line
Jacek Koralik
sumber
sumber
ps
maka coba pertamaman ps
,info ps
dan pelajari tentang itu di Internet.Jawaban:
mencoba:
dan lihat bagaimana Anda maju
sumber
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,
sumber
paling berguna. Mencetak pid dan nama kelas utama yang memenuhi syarat:
sumber
Anda juga dapat menggunakan perintah tunggal pgrep (tidak mengharuskan Anda menggunakan pipa dan banyak perintah):
sumber
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:
Lebih detail tentang cara menggunakan
jcmd
.Lihat juga yang
jcmd
Utilitassumber
jps
Untuk format keluaran yang lebih baik periksa perintah ini:
sumber
Ini akan mengembalikan semua proses java yang berjalan di lingkungan linux. Kemudian Anda dapat menghentikan proses menggunakan ID proses.
sumber
ps aux | grep java
atau
$ ps -fea|grep -i java
sumber
Jika saya hanya ingin membuat daftar proses java, gunakan:
sumber
sumber
grep
prosesnya?Keinginan di atas
(btw, contoh ini bukan yang efektif, tapi mudah diingat);)
Anda dapat menyalurkan perintah di atas ke perintah lain, misalnya:
dll ...
sumber
Ketika saya ingin tahu apakah kelas Java tertentu sedang dieksekusi, saya menggunakan baris perintah berikut:
Dari tampilan sisi OS, nama perintah prosesnya adalah "java". Opsi "ww" memperluas karakter maksimum kolom, jadi dimungkinkan untuk melakukan grep FQN dari kelas terkait.
sumber
$ top
hanya memberikan "java" sebagai perintah yang tidak terlalu membantu ketika mencoba untuk mencari tahu proses mana yang memonopoli cpu.$ ps ww -fC java
memberikan potongan teka-teki yang hilang.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.
Hasilnya terlihat seperti ini:
Alternatif di windows untuk mencantumkan semua proses adalah:
Tapi itu akan membutuhkan beberapa penguraian agar lebih terbaca.
sumber
Ada banyak cara untuk melakukan ini. Anda dapat menggunakan
java.lang.ProcessBuilder
dan "pgrep" untuk mendapatkan proses id (PID) dengan sesuatu seperti:pgrep -fl java | awk {'print $1'}
. Atau, jika Anda menjalankan di Linux, Anda dapat meminta/proc
direktori.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
fork
danjoin
proses 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.sumber
Ini lebih baik karena ini hanya akan menampilkan proses aktif tidak termasuk perintah ini yang juga mendapat string java yang
[]
melakukan triksumber
Saya menggunakan ini (bagus di Debian 8):
alias psj='ps --no-headers -ww -C java -o pid,user,start_time,command'
sumber
Untuk mengetahui daftar java yang berjalan di mesin linux. ps -e | grep java
sumber