如何獲得Process對象的PID (JAVA)


找到了這里,就代表你找到了解決問題的途徑

在Liunx系統上,如何獲得一個Process對象的PID,用於殺死進程。

網上最多的解法是利用java.lang.UNIXProcess獲取,當時我在CentOS-7上試了一次,發現不好使,代碼如下:

Class<?> clazz = Class.forName("java.lang.UNIXProcess");
field = clazz.getDeclaredField("pid")
field.setAccessible(true);
pid = (Integer)field.get(p);
這段代碼是手敲的,不保證正確,大概就是這樣

會報錯

報錯為:java.lang.ClassNotFoundException: java.lang.UNIXProcess

簡而言之,就是找不到對應的類。

主要原因是:Process是一個抽象類,其本身不能實例化的,能實例化的是其子類,UNIXProcess能用的前提必須是Process的子類。我經過查詢,發現在我使用的系統(或者JDK)版本上,Process的子類是ProcessImpl。如果有一天,我這個解法也不好用了,沒關系,繼續找Process的子類就可以了。。。

解決方法是把java.lang.UNIXProcess替換為java.lang.ProcessImpl

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM