1. 程式人生 > 實用技巧 >如何獲得Process物件的PID (JAVA)

如何獲得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