如何獲得Process物件的PID (JAVA)
阿新 • • 發佈:2020-10-28
找到了這裡,就代表你找到了解決問題的途徑
在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