日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Java获取并Kill系统进程

發布時間:2024/7/23 windows 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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系统进程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。