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.
psmaka coba pertama man ps, info psdan pelajari tentang itu di Internet.
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.
psmaka coba pertama man ps, info psdan pelajari tentang itu di Internet.
Jawaban:
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
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
Anda juga dapat menggunakan perintah tunggal pgrep (tidak mengharuskan Anda menggunakan pipa dan banyak perintah):
pgrep -fl java
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
jcmdmemungkinkan untuk mengirim permintaan perintah diagnostik ke Java Virtual Machine (JVM) yang sedang berjalan.
Lebih detail tentang cara menggunakanjcmd .
Lihat juga yang jcmdUtilitas
jps
Untuk format keluaran yang lebih baik periksa perintah ini:
ps -fC java
Ini akan mengembalikan semua proses java yang berjalan di lingkungan linux. Kemudian Anda dapat menghentikan proses menggunakan ID proses.
ps -e|grep java
ps aux | grep java
atau
$ ps -fea|grep -i java
Jika saya hanya ingin membuat daftar proses java, gunakan:
ps -A | grep java
pgrep -l java
ps -ef | grep java
grepprosesnya?
ps axuwww | grep java | grep -v grep
Keinginan di atas
(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 ...
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.
$ 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.
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.
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.
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
Saya menggunakan ini (bagus di Debian 8):
alias psj='ps --no-headers -ww -C java -o pid,user,start_time,command'
Untuk mengetahui daftar java yang berjalan di mesin linux. ps -e | grep java