博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 启动windows服务、进程,查看某一进程、服务的cpu使用量
阅读量:5369 次
发布时间:2019-06-15

本文共 11017 字,大约阅读时间需要 36 分钟。

  这几天在做一个模块,使用Java关闭重启windows server 2008上的服务。开始使用的是j-interop。后来leader说,这玩意不行。ms已经去掉了administrator的特权,要使用这玩意就需要用setacl.exe对注册表修改,这exe包,打不开,看不到里面的东西,用起来心慌慌的。

  后面么,发现当你一超级管理员登陆时,windows上打开的cmd能直接运行关闭启动服务的命令。就来个曲线救国吧,好在不要求远程启动服务,不然又是一番好忙。

  废话到此结束。

  前提条件是,你随意打开cmd,上面显示的是“管理员”,如下图所示,否则,还是有些功能不能实现。

       

   代码如下:

public class WmiServiceUtils {    public static final Logger logger = LoggerFactory.getLogger(WmiServiceUtils.class);    private static List
> getAllResult(String[] cmdStr, int flag) throws IOException { List
> list = new ArrayList<>(); Integer index = 1; Process p = null; String str = null; String[] arrStr = new String[2]; Map
map = new HashMap
(); InputStreamReader isr = null; BufferedReader br = null; try { p = Runtime.getRuntime().exec(cmdStr); isr = new InputStreamReader(p.getInputStream()); br = new BufferedReader(isr); while ((str = br.readLine()) != null) { if (StringUtil.isNotEmpty(str)) { if (index % flag == 0) { list.add(map); map = new HashMap
(); } arrStr = str.split("="); str = str.endsWith("=") ? "" : arrStr[1]; map.put(arrStr[0], str); index++; } } } catch (IOException e) { logger.error("获取进程的所有信息失败!", e); throw e; } catch (Exception e) { logger.error("获取执行结果失败!", e); throw e; } finally { try { if (br != null) { } br.close(); if (isr != null) { isr.close(); } } catch (IOException e) { logger.error("", e); } if (p != null) { p.destroy(); } } return list; } @SuppressWarnings("unused") private static String parse2Time(long milliseconds) { if (milliseconds == 0) { return "0秒"; } if (milliseconds / 1000 == 0) { return "0." + milliseconds + "秒"; } milliseconds = milliseconds / 1000; long day = milliseconds / (24 * 3600); milliseconds = milliseconds % (24 * 3600); if (milliseconds == 0) { return day + "天"; } long hour = milliseconds / (3600); milliseconds = milliseconds % (3600); if (milliseconds == 0) { return day + "天" + hour + "小时"; } long minute = milliseconds / (60); milliseconds = milliseconds % (60); if (milliseconds == 0) { return day + "天 " + hour + "小时 " + minute + "分钟"; } else { return day + "天 " + hour + "小时 " + minute + "分钟 " + milliseconds + "秒"; } } private static Map
printStream(InputStream input) throws IOException { //InputStream input final Process proc InputStreamReader isr = new InputStreamReader(input); //proc.getInputStream() BufferedReader br = new BufferedReader(isr); Map
map = new HashMap
(); String str = null; String[] arrStr = null; try { while ((str = br.readLine()) != null) { if (StringUtil.isNotEmpty(str)) { if (str.contains("=")) { arrStr = str.split("="); str = str.endsWith("=") ? "" : arrStr[1]; map.put(arrStr[0], str); } else { map.put(str, null); } } } } catch (IOException e) { logger.error("关闭文件流失败!", e); throw e; } finally { try { if (br != null) { br.close(); } if (isr != null) { isr.close(); } if (input != null) { input.close(); } } catch (IOException e) { logger.error("关闭文件流失败!", e); throw e; } } return map; } private static String printErrorStream(InputStream input) throws IOException { InputStreamReader reader = new InputStreamReader(input); BufferedReader br = new BufferedReader(reader); String msg = ""; String str = ""; try { while ((str = br.readLine()) != null) { if (StringUtil.isNotEmpty(str)) { msg += str + ","; } } if(msg.endsWith(",")){ msg.substring(0, msg.lastIndexOf(",")); } return msg; } catch (IOException e) { logger.error("读取错误信息失败!", e); throw e; } finally { try { if (br != null) { br.close(); } if (reader != null) { reader.close(); } if (input != null) { input.close(); } } catch (IOException e) { logger.error("关闭文件流失败!", e); throw e; } } } private static Map
execCommand(String[] cmdStr) throws IOException { Process p = null; Map
map = new HashMap<>(); try { p = Runtime.getRuntime().exec(cmdStr); logger.info("执行错误信息: " + printErrorStream(p.getErrorStream())); map = printStream(p.getInputStream()); } catch (IOException e) { logger.error("启动服务失败!", e); throw e; } catch (Exception e) { logger.error("获取执行结果失败!", e); throw e; } finally { if (p != null) { p.destroy(); } } return map; } /** * 启动服务 * @param serviceName 右键 指定服务项-》属性 -》服务名称 * @return * @throws IOException */ public static Map
startService(String serviceName) throws IOException { String[] cmdStr = { "cmd", "/C", " net start " + serviceName };//runAs /user:Administrator logger.info(Arrays.toString(cmdStr)); try { return execCommand(cmdStr); } catch (IOException e) { logger.error("开启服务失败!", e); throw e; } } /** * 关闭服务 * @param serviceName 右键 指定服务项-》属性 -》服务名称 * @return * @throws IOException */ public static Map
stopService(String serviceName) throws IOException { String[] cmdStr = { "cmd", "/C", "net stop " + serviceName };//runAs /user:Administrator logger.info(Arrays.toString(cmdStr)); try { return execCommand(cmdStr); } catch (IOException e) { logger.error("关闭服务失败!", e); throw e; } } /** * 禁用服务 * @param serviceName * @return * @throws IOException */ public static Map
disableService(String serviceName) throws IOException { String[] cmdStr = { "cmd", "/C", "sc config " + serviceName + " start= disabled" };//runAs /user:Administrator logger.info(Arrays.toString(cmdStr)); try { return execCommand(cmdStr); } catch (IOException e) { logger.error("关闭服务失败!", e); throw e; } } /** * 启用服务 --自动 * @param serviceName * @return * @throws IOException */ public static Map
enableService(String serviceName) throws IOException { String[] cmdStr = { "cmd", "/C", "sc config " + serviceName + " start= auto" };//runAs /user:Administrator logger.info(Arrays.toString(cmdStr)); try { return execCommand(cmdStr); } catch (IOException e) { logger.error("关闭服务失败!", e); throw e; } } /** * 启用服务 --手动 * @param serviceName * @return * @throws IOException */ public static Map
demandService(String serviceName) throws IOException { String[] cmdStr = { "cmd", "/C", "sc config " + serviceName + " start= demand" };//runAs /user:Administrator logger.info(Arrays.toString(cmdStr)); try { return execCommand(cmdStr); } catch (IOException e) { logger.error("关闭服务失败!", e); throw e; } } /** * * @param serviceName 映像名称 XXXX.exe * @return * @throws IOException */ public static Map
getTaskDetail(String taskName) throws IOException { String[] cmdStr = { "cmd", "/C", "wmic process where name='" + taskName + "' list full" }; logger.info(Arrays.toString(cmdStr)); try { return execCommand(cmdStr); } catch (IOException e) { logger.error("关闭服务失败!", e); throw e; } } /** * * @param processId PID * @return * @throws IOException */ public static Map
getTaskDetail(Integer processId) throws IOException { String[] cmdStr = { "cmd", "/C", "wmic process where processid='" + processId + "' list full" };// get /format:value logger.info(Arrays.toString(cmdStr)); try { return execCommand(cmdStr); } catch (IOException e) { logger.error("关闭服务失败!", e); throw e; } } public static List
> getAllTaskDetail() throws IOException { String[] cmdStr = { "cmd", "/C", "wmic process get /value" }; logger.info(Arrays.toString(cmdStr)); List
> list = null; try { list = getAllResult(cmdStr, 45); } catch (IOException e) { logger.error("获取所有进程信息失败!", e); throw e; } return list; } public static List
> getAllService() throws IOException { String[] cmdStr = { "cmd", "/C", "wmic service get /value" }; logger.info(Arrays.toString(cmdStr)); List
> list = null; try { list = getAllResult(cmdStr, 25); } catch (IOException e) { logger.error("获取所有服务信息失败!", e); throw e; } return list; } /** * * @param serviceName 右键 指定服务项-》属性 -》服务名称 * @return * @throws IOException */ public static Map
getServiceDetail(String serviceName) throws IOException { String[] cmdStr = { "cmd", "/C", "wmic service where name='" + serviceName + "' list full" }; logger.info(Arrays.toString(cmdStr)); try { return execCommand(cmdStr); } catch (IOException e) { logger.error("关闭服务失败!", e); throw e; } } /** * * @param processId PID * @return * @throws IOException */ public static Map
getServiceDetail(Integer processId) throws IOException { String[] cmdStr = { "cmd", "/C", "wmic service where processid='" + processId + "' list full" }; logger.info(Arrays.toString(cmdStr)); try { return execCommand(cmdStr); } catch (IOException e) { logger.error("关闭服务失败!", e); throw e; } } public static Map
createProcess(String taskpath) throws IOException { String[] cmdStr = { "cmd", "/C", "wmic process call create'" + taskpath + "'" }; try { return execCommand(cmdStr); } catch (IOException e) { logger.error("关闭服务失败!", e); throw e; } } public static Map
deleteProcess(String taskname) throws IOException { String[] cmdStr = { "cmd", "/C", " wmic process where name='" + taskname + "' delete" };//runAs /user:Administrator try { return execCommand(cmdStr); } catch (IOException e) { logger.error("关闭服务失败!", e); throw e; } } /** * 计算某进程cpu使用率 * @param processName * @return * @throws Exception * @see sysTime:表示该时间段内总的CPU时间=CPU处于用户态和内核态CPU时间的总和,即sysTime =kerneTimel + userTime(注:这里并不包括idleTime,因为当CPU处于空闲状态时,实在内核模式下运行System Idle Process这个进程,所以kernelTime实际上已经包含了idleTime); idleTime:表示在该时间段内CPU处于空闲状态的时间;CPU% = 1 – idleTime / sysTime * 100 */ public static String getCpuRatioForWindows(String processName) throws Exception { String[] cmdStr = { "cmd", "/C", "wmic process get Caption,CommandLine,KernelModeTime,ReadOperationCount,ThreadCount,UserModeTime,WriteOperationCount /value" }; try { List
> list1 = getAllResult(cmdStr, 7); long[] data1 = getCpuTime(list1, processName); Thread.sleep(1000); List
> list2 = getAllResult(cmdStr, 7);// get(p.getInputStream()); long[] data2 = getCpuTime(list2, processName); long proctime = data2[2] - data1[2]; long totaltime = data2[1] - data1[1]; // + data2[0] - data1[0] if(totaltime==0){ return "0%"; } return Double.valueOf(10000 * proctime * 1.0 / totaltime).intValue()/100.00 + "%"; } catch (Exception e) { logger.error("获取CPU占用率失败!", e); throw e; } } private static long[] getCpuTime(List
> list, String processName) { long[] data = new long[3]; long idletime = 0; long kneltime = 0; long usertime = 0; long processTime = 0; String caption = ""; String kmtm = ""; String umtm = ""; for (Map
m : list) { caption = m.get("Caption").toString(); kmtm = m.get("KernelModeTime").toString(); umtm = m.get("UserModeTime").toString(); if (caption.equals("System Idle Process") || caption.equals("System")) { if (kmtm != null && !kmtm.equals("")) { idletime += Long.parseLong(kmtm); } if (umtm != null && !umtm.equals("")) { idletime += Long.parseLong(umtm); } } if (caption.equals(processName)) { if (kmtm != null && !kmtm.equals("")) { processTime += Long.parseLong(kmtm); } if (umtm != null && !umtm.equals("")) { processTime += Long.parseLong(umtm); } } if (kmtm != null && !kmtm.equals("")) { kneltime += Long.parseLong(kmtm); } if (umtm != null && !umtm.equals("")) { usertime += Long.parseLong(umtm); } } data[0] = idletime; data[1] = kneltime + usertime; data[2] = processTime; return data; }

       就这么点,这么简单,完全不需要解释。

  当时查资料的时候,借阅了网上众多大神的博客,论坛什么的,如果其中有内容侵犯了你的权益,请及时与我联系。

转载于:https://www.cnblogs.com/mituonline/p/4449535.html

你可能感兴趣的文章
BZOJ 3399 [Usaco2009 Mar]Sand Castle城堡(贪心)
查看>>
WCF(一) 简单的认知
查看>>
[MFC][DShow]简单例子
查看>>
js onclick事件传参
查看>>
WiCloud 商业Wi-Fi管理平台
查看>>
团队项目--未完待续
查看>>
python中的网页标签等字符处理
查看>>
Linux常用命令(十二)
查看>>
Linux常用命令(十五)
查看>>
Linux常用命令(十四)
查看>>
Linux常用命令(十七)
查看>>
Linux常用命令(十六)
查看>>
day 3 修改haproxy.cfg 作业
查看>>
sim usim Uim 区别
查看>>
网页中插入透明Flash的方法和技巧
查看>>
动态内存申请函数选择(realloc、malloc 、alloca、 calloc)
查看>>
获取元素属性get_attribute
查看>>
Python/jquery
查看>>
【BZOJ】【2132】圈地计划
查看>>
Java有没有goto?
查看>>