Java检测进程列表,进程是否运行,开启和关闭指定进程

     Boss提了个想法,客户通过系统页面可以直接操作服务器的某些进程,包括检测运行的进程有哪些,指定的进程是否运行,开启关闭重启相关的进程,就先写了个demo功能基本上都实现了,废话不多说直接贴代码。

package Test;


import java.awt.*;
import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class Demo {
    //得到所有运行的进程名称
    public static String[] getProcessName() {
        String[] taskName = null;
        List<String> taskList = new ArrayList<String>();
        try {
            Process p = Runtime.getRuntime().exec("tasklist");
            BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream(), "gbk"));
            String s = "";
            while ((s = br.readLine()) != null) {
                if ("".equals(s)) {
                    continue;
                }
                taskList.add(s + "");
            }
            //获取每列的最长长度
            String maxRow = taskList.get(1) + "";
            String[] maxCol = maxRow.split(" ");
            //进程名称
            taskName = new String[taskList.size()];
            for (int i = 0; i < taskList.size(); i++) {
                String data = taskList.get(i) + "";
                for (int j = 0; j < maxCol.length; j++) {
                    switch (j) {
                        case 0:
                            taskName[i] = data.substring(0, maxCol[j].length() + 1).trim();
                            data = data.substring(maxCol[j].length() + 1);
                            break;
                    }
                }
            }
        } catch (java.io.IOException e) {
            e.printStackTrace();
        }
        return taskName;
    }

    //查询进程是否开启
    public static String getProcessStatus(String[] taskName, String processName) {
        String s = "此进程已结束";
        for (int i = 0; i < taskName.length; i++) {
            System.out.println(taskName[i]);
            if (taskName[i].contains(processName)) {
                s = "此进程已开启";
            }
        }
        return s;
    }

    //关闭进程
    public static String killProcess(String processName) throws IOException {
        String s = "进程名称不能为空";
        String active = getProcessStatus(getProcessName(), processName);
        if (!"".equals(processName)) {
            if (active.equals("此进程已结束")) {
                s = "进程已关闭,无需再次关闭";
            } else {
                Process p = Runtime.getRuntime().exec("taskkill /F /IM " + processName);
                BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream(), "gbk"));
                s = br.readLine().toString();
            }
        }
        return s;
    }

    //开启进程(相当于重启) 若存在该进程,再次开启则存在两个进程
    public static String startProcess(String processName, String url) throws IOException {
        String s = "进程名称不能为空";
        //需要先检测进程是否存在
        String active = getProcessStatus(getProcessName(), processName);
        if (!"".equals(processName)) {
            if (!"".equals("此进程已开启")) {
                String kill = killProcess(processName);
                Desktop.getDesktop().open(new File(url));
                s = "进程重启成功";
            } else {
                Desktop.getDesktop().open(new File(url));
                s = "进程开启成功";
            }
        }
        return s;
    }
    public static void main(String[] args) throws IOException{
        String[] taskName = getProcessName();
        String s = getProcessStatus(taskName,"chrome.exe");
        System.out.println(s);
        String kill = killProcess("chrome.exe");
        System.out.println(kill);
        String active = startProcess("chrome.exe","C:\\Users\\11654\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe");
        System.out.println(active);
    }
}

   主要用到了process这个类,在流转换的时候要转成gbk的,否则中文会乱码。

  检测程序只能显示程序的名称,以下代码可以显示pid号等等。

for (int i = 0; i < tasklist.size(); i++) {
						String data = tasklist.get(i) + "";
						for (int j = 0; j < maxCol.length; j++) {
							switch (j) {
							case 0:
								taskName[i]=data.substring(0, maxCol[j].length()+1);
								data=data.substring(maxCol[j].length()+1);
								break;
							case 1:
								taskPid[i]=data.substring(0, maxCol[j].length()+1);
								data=data.substring(maxCol[j].length()+1);
								break;
							case 2:
								taskSessionName[i]=data.substring(0, maxCol[j].length()+1);
								data=data.substring(maxCol[j].length()+1);
								break;
							case 3:
								taskSession[i]=data.substring(0, maxCol[j].length()+1);
								data=data.substring(maxCol[j].length()+1);
								break;
							case 4:
								taskNec[i]=data;
								break;
							}
						}
					}				
 
					for (int i = 0; i < taskNec.length; i++) {
						//打印进程列表
						//System.out.println(taskName[i]+" "+taskPid[i]+" "+taskSessionName[i]+" "+taskSession[i]+" "+taskNec[i]);				
						if(taskName[i].contains(processName)){
							count++;//用于进程计数		
						}			
					}
				   }

 

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值