生活随笔
收集整理的這篇文章主要介紹了
Java获取并Kill系统进程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原理:獲取系統所有進程列表,遍歷,然后進行模糊匹配,將匹配到的進程殺死!?
作用:保證在系統中只有一個程序進程實例。
/*** 確保系統中只有一個程序實例* 1.如果客戶端啟動前,操作系統中有殘留進程,則殺死進程,然后啟動* 2.如果客戶端啟動前,操作系統中沒有殘留進程,則直接啟動* 時間:2018-04-13* @author Jason**/
public class SingleProcess {public static Logger logger = Logger.getLogger(SingleProcess.class);/*** 確認進程,獲取進程,殺死進程* @param prefix 進程名前綴*/public static void comfirmSingleProcess(String prefix) {if(prefix == null) {throw new NullPointerException("The prefix is null,please check it!!");}// 聲明文件讀取流BufferedReader out = null;BufferedReader br = null;try {// 創建系統進程ProcessBuilder pb = new ProcessBuilder("tasklist");Process p = pb.start();// 讀取進程信息out = new BufferedReader(new InputStreamReader(new BufferedInputStream(p.getInputStream()), Charset.forName("GB2312")));br = new BufferedReader(new InputStreamReader(new BufferedInputStream(p.getErrorStream())));// 創建集合 存放 進程+pidList<String> list = new ArrayList<>();// 讀取String ostr;while ((ostr = out.readLine()) != null){// 將讀取的進程信息存入集合list.add(ostr);}// 遍歷所有進程for (int i = 3; i < list.size(); i++) {// 必須寫死,截取長度,因為是固定的String process = list.get(i).substring(0, 25).trim(); // 進程名String pid = list.get(i).substring(25, 35).trim(); ? ?// 進程號// 匹配指定的進程名,若匹配到,則立即殺死if(process.startsWith(prefix)){Runtime.getRuntime().exec("taskkill /F /PID "+pid);?}}// 若有錯誤信息 即打印日志String estr = br.readLine();if (estr != null) {logger.error(estr);}} catch (IOException e) {e.printStackTrace();}finally {// 關流try {if(out != null) { out.close(); }} catch (IOException e) {e.printStackTrace();}try {if(br != null) { br.close(); }} catch (IOException e) {e.printStackTrace();}}}
}
使用示例:
public class Example {public static void main(String[] args) {String prefix = "chrom"; //模糊匹配谷歌進程SingleProcess.comfirmSingleProcess(prefix);}
}
-----------------------Linux-----------------------
1.首先通過
Process pid=Runtime.getRuntime().exec("ps -ef");
找出linux當前運行的所有進程。
? 2.再把pid寫入流中:
BufferedReader br = new BufferedReader(new InputStreamReader(pid.getInputStream()), 1024);
3.讀取流中的指定信息:
String line = null;while ((line = br.readLine()) != null) {if(line.contains("進程名")){logger.info("進程分流信息是:"+line);String [] inf=line.split(" +");for(int j=0;j<inf.length;j++){logger.info("inf["+j+"]="+inf[j]);}logger.info("進程號信息是:"+inf[1]);Process pi=Runtime.getRuntime().exec("kill -9 "+inf[1]);logger.info("已執行殺進程");}else{// ? ? ? ? ? ? logger.info(""+line);}}
? ?4.這樣就把指定的進程給kill成功了!
注:logger.info()是為了打印日志的,可以替換成System.out.println();
總結
以上是生活随笔為你收集整理的Java获取并Kill系统进程的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。