Saya mencoba (dan gagal) melakukan ini beberapa waktu lalu. Saya akhirnya membungkus perintah saya dalam skrip shell yang membuang pid ke file. Bukan solusi terbaik tetapi membuat saya melewati rintangan ini.
Masih belum ada API publik untuk ini (lihat http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4244896) tetapi ada beberapa solusi.
Solusi pertama adalah dengan menggunakan program eksternal seperti ps
dan untuk memanggilnya menggunakan Runtime.exec()
untuk mendapatkan pid :)
Satu lagi didasarkan pada fakta bahwa java.lang.Process
kelas abstrak dan Anda benar-benar mendapatkan subkelas konkret tergantung pada platform Anda. Di Linux, Anda akan mendapatkan java.lang.UnixProcess
yang memiliki bidang pribadi int pid
. Menggunakan refleksi, Anda dapat dengan mudah mendapatkan nilai bidang ini:
Field f = p.getClass().getDeclaredField("pid");
f.setAccessible(true);
System.out.println( f.get( p ) );