Ini adalah pendekatan lain untuk mengurai daftar proses dari perintah " ps -e ":
try {
String line;
Process p = Runtime.getRuntime().exec("ps -e");
BufferedReader input =
new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null) {
System.out.println(line); //<-- Parse data here.
}
input.close();
} catch (Exception err) {
err.printStackTrace();
}
Jika Anda menggunakan Windows, maka Anda harus mengubah baris: "Process p = Runtime.getRun ..." dll ... (baris ke-3), untuk baris yang terlihat seperti ini:
Process p = Runtime.getRuntime().exec
(System.getenv("windir") +"\\system32\\"+"tasklist.exe");
Semoga infonya membantu!
tasklist.exe /fo csv /nh
untuk mendapatkan daftar dalam format CSV, itu jauh lebih mudah untuk diurai.ps -elf | grep java
tidak akan mengembalikan apa pun, tetapips -elf
akan berfungsi seperti yang diharapkan.(.exec (Runtime/getRuntime) "tasklist"))
(di Clojure, menggunakan Java-interop) mengembalikantasklist
proses dengan benar , bahkan tanpa menentukan direktori.Akhirnya, dengan Java 9+ dimungkinkan dengan
ProcessHandle
:Keluaran:
sumber
java.lang
jadi tidak perlu mengimporDi Windows ada alternatif menggunakan JNA :
sumber
GetModuleFileName
. Lihat stackoverflow.com/questions/7521693/… sebagai contoh.WMIC PROCESS
atau untuk membatasi output untuk proses tertentu:WMIC PROCESS WHERE name='theName'
. Anda dapat menggunakan filter lebih lanjut untuk membatasi keluaran jika diperlukan. Baris perintah disertakan dalam kolom CommandLine dari tabel yang dikembalikan (= kolom ke-2)Satu-satunya cara yang dapat saya pikirkan untuk melakukannya adalah dengan menjalankan aplikasi baris perintah yang melakukan pekerjaan untuk Anda dan kemudian menyaring hasilnya (seperti ps Linux dan daftar tugas Windows).
Sayangnya, itu berarti Anda harus menulis beberapa rutinitas parsing untuk membaca data dari keduanya.
sumber
tasklist
program dapat dikonfigurasi untuk mengeluarkan CSV :)YAJSW (Yet Another Service Wrapper Java) sepertinya memiliki implementasi berbasis JNA dari antarmuka org.rzo.yajsw.os.TaskList untuk win32, linux, bsd dan solaris dan berada di bawah lisensi LGPL. Saya belum mencoba memanggil kode ini secara langsung, tetapi YAJSW bekerja dengan sangat baik ketika saya menggunakannya di masa lalu, jadi Anda tidak perlu terlalu khawatir.
sumber
Anda dapat dengan mudah mengambil daftar proses yang berjalan menggunakan jProcesses
sumber
Tidak ada cara netral platform untuk melakukan ini. Dalam rilis 1.6 Java, kelas " Desktop " telah ditambahkan yang memungkinkan cara portabel untuk menjelajah, mengedit, mengirim, membuka, dan mencetak URI. Mungkin saja suatu saat kelas ini dapat diperluas untuk mendukung proses, tetapi saya meragukannya.
Jika Anda hanya ingin tahu tentang proses Java, Anda dapat menggunakan api java.lang.management untuk mendapatkan informasi utas / memori di JVM.
sumber
Untuk windows saya gunakan berikut ini:
sumber
Ini mungkin berguna untuk aplikasi dengan JRE yang dibundel: Saya memindai nama folder tempat saya menjalankan aplikasi: jadi jika aplikasi Anda dijalankan dari:
maka Anda dapat mengetahui apakah itu sudah berjalan di J9, dengan:
sumber
Menggunakan kode untuk mengurai
ps aux
untuk linux dantasklist
untuk windows adalah pilihan terbaik Anda, sampai sesuatu yang lebih umum muncul.Untuk Windows, Anda dapat merujuk ke: http://www.rgagnon.com/javadetails/java-0593.html
Linux juga dapat menyalurkan hasil
ps aux
melaluigrep
, yang akan membuat pemrosesan / pencarian cepat dan mudah. Saya yakin Anda juga dapat menemukan sesuatu yang mirip untuk windows.sumber
Program di bawah ini hanya akan kompatibel dengan versi Java 9+ ...
Untuk mendapatkan informasi CurrentProcess,
Untuk semua proses yang berjalan,
sumber
Kita harus menggunakan
process.getOutputStream.close()
jika tidak maka akan terkunci di while loop.sumber
sumber
Ini adalah kode saya untuk fungsi yang mendapatkan tugas dan mendapatkan namanya, juga menambahkannya ke dalam daftar agar dapat diakses dari daftar. Ini membuat file temp dengan data, membaca file dan mendapatkan nama tugas dengan akhiran .exe, dan mengatur file yang akan dihapus ketika program telah keluar dengan System.exit (0), itu juga menyembunyikan proses yang digunakan untuk dapatkan tugas dan juga java.exe sehingga pengguna tidak dapat secara tidak sengaja mematikan proses yang menjalankan program secara bersamaan.
sumber