Java 启动windows服务、进程,查看某一进程、服务的cpu使用量

您所在的位置:网站首页 java服务怎么启动 Java 启动windows服务、进程,查看某一进程、服务的cpu使用量

Java 启动windows服务、进程,查看某一进程、服务的cpu使用量

2022-03-23 18:41| 来源: 网络整理| 查看: 265

发布时间:2015-04-23 12:00:18

原标题:Java 启动windows服务、进程,查看某一进程、服务的cpu使用量

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

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

  废话到此结束。

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

       Java 启动windows服务、进程,查看某一进程、服务的cpu使用量

   代码如下:

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; }

原标题:Java 启动windows服务、进程,查看某一进程、服务的cpu使用量

关键词:JAVA

转载请保留本文网址: http://www.shaoqun.com/a/115228.html 上一篇: 音乐社交APP源码ios版 下一篇: 图片轮播(Jquery)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3