【前言】被某个网上的人恶心了一下,希望他已经不要到此处,更不要留下什么污言杂语。不欢迎!
【正文】实现要点
1. java调用shell命令(ps),并处理命令的返回结果
2. ps -ef | grep manager | grep -v grep | awk '{print $2}' 可以得到manager进程的PID
注意,这里会有一个问题,grep manager会将一些带有manager关键字的其他进程也找出来,导致错误,稍微正确一些的是:
ps -ef | grep 'manager$' | grep -v grep | awk '{print $2}'
用正则表达式限制一下要以manager结尾
3. ps -o etime -p [pid] 可以得到指定pid的进程的已经运行的时间
注意,在HP和HPAT机型上,需要设置环境变量UNIX95=1才能使用ps -o选项。其他(Linux、SUN、IBM)上不需要设置该环境变量。
package org.snmp4j.agent.uvcagent; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class ScpState { private static Log agentLog = Log.getInstance(); /** * 调用GetScpPid判断manager的pid是否存在 * */ public static boolean isScpRun() { //调用GetScpState得到SCP的pid String scpPid = GetScpPid(); if (scpPid.compareToIgnoreCase("") != 0) { //如果pid不为空,说明manager在运行 //true表示SCP运行 agentLog.getLog().debug("Manager is running"); return true; } //false表示SCP不运行 agentLog.getLog().debug("Manager is not running"); return false; } /** * 通过ps -ef | grep manager | awk '{print $2}' * 得到manager的pid * * 如果pid不为空,说明manager是在运行的 */ public static String GetScpPid() { String scpPid = ""; Runtime rt = Runtime.getRuntime(); //shell命令 String str[] = {"/bin/sh", "-c","ps -ef | grep manager | grep -v grep |awk '{print $2}'"}; //String str[] = {""}; Process pcs; try { agentLog.getLog() .debug("Run shell: ps -ef | grep manager | grep -v grep |awk '{print $2}'"); pcs = rt.exec(str); BufferedReader br = new BufferedReader(new InputStreamReader( pcs.getInputStream())); //得到shell的执行结果 scpPid = br.readLine(); //当manager没有运行时,得到shell的返回值的,所以这里要特殊处理一下 if(scpPid == null) { scpPid = ""; } agentLog.getLog().debug("Get Pid of Manager: " + scpPid); try { pcs.waitFor(); } catch (InterruptedException e) { agentLog.getLog() .error("Get InterruptedException: processes was interrupted"); } br.close(); pcs.exitValue(); } catch (IOException e1) { agentLog.getLog().debug("Get IOException!"); // TODO Auto-generated catch block e1.printStackTrace(); } return scpPid; } /** * 通过ps -o etime -p [mangaer pid] * 得到magager的运行时间 * * 重点在etime * * HP和HPAT上需要先设置环境变量 UNIX95=1才能使用-o选项。 */ public static long GetScpRunTime(String Pid) { String str2[] = {"/bin/sh", "-c", "ps -o etime -p " + Pid}; String scpRunTime = ""; Runtime rt = Runtime.getRuntime(); Process pcs2; try { System.out.println("ps -o etime -p " + Pid); agentLog.getLog().debug("Run shell: ps -o etime -p " + Pid); pcs2 = rt.exec(str2); BufferedReader br = new BufferedReader(new InputStreamReader( pcs2.getInputStream())); //当manager进程只有一个时,该命令应该返回两行,第二行是etime的时间 String line = new String(); while ((line = br.readLine()) != null) { scpRunTime = line.trim(); } agentLog.getLog().debug("Get RunTime of Manager: " + scpRunTime); try { pcs2.waitFor(); } catch (InterruptedException e) { agentLog.getLog() .error("Get InterruptedException: processes was interrupted"); } br.close(); pcs2.exitValue(); } catch (IOException e1) { agentLog.getLog().debug("Get IOException!"); // TODO Auto-generated catch block e1.printStackTrace(); } //转换etime的时间格式,为毫秒 return ChangeTimeFormat(scpRunTime); } /** * 转换etime的时间格式[[dd-]hh:]mm:ss * 为毫秒 */ public static long ChangeTimeFormat(String etimeFormat) { String day = ""; String hour = ""; String minuter = ""; String second = ""; String tempEtimeFormat = etimeFormat; if (etimeFormat.indexOf("-") != -1) { day = etimeFormat.substring(0, etimeFormat.indexOf("-")); //tempEtimeFormat为[hh:]mm:ss tempEtimeFormat = etimeFormat.substring(etimeFormat.indexOf("-") + 1, etimeFormat.length()); } //从etimeFormat中得到秒 second = tempEtimeFormat.substring(tempEtimeFormat.lastIndexOf(":") + 1, tempEtimeFormat.length()); tempEtimeFormat = tempEtimeFormat.substring(0, tempEtimeFormat.lastIndexOf(":")); minuter = tempEtimeFormat.substring(tempEtimeFormat.lastIndexOf(":") + 1, tempEtimeFormat.length()); if (tempEtimeFormat.lastIndexOf(":") != -1) { tempEtimeFormat = tempEtimeFormat.substring(0, tempEtimeFormat.lastIndexOf(":")); hour = tempEtimeFormat; } Long dayLong = new Long(0); Long hourLong = new Long(0); Long mimuterLong = new Long(0); Long secondLong = new Long(0); if (day.compareTo("") != 0) { dayLong = Long.valueOf(day); } if (hour.compareTo("") != 0) { hourLong = Long.valueOf(hour); } mimuterLong = Long.valueOf(minuter); secondLong = Long.valueOf(second); //以毫秒为单位 long scpRunTime = dayLong.longValue() * 24 * 60 * 60 * 1000 + hourLong.longValue() * 60 * 60 * 1000 + mimuterLong.longValue() * 60 * 1000 + secondLong.longValue() * 1000; agentLog.getLog().debug("Change time to millisecond: " + scpRunTime); return scpRunTime; } public static void main(String args[]) { if(isScpRun()) { System.out.println("Manger is running"); String pid = GetScpPid(); System.out.println("Pid is: " + pid); long time = GetScpRunTime(pid); System.out.println("Time is: " + time); } else { System.out.println("Manger is not running"); } } }
您还没有登录,请您登录后再发表评论
进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。 进程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进行计算。 每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F...
进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进行计算。 每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成...
进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。进程的运行时间以时间片为单位进行计算。每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成F...
3.进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。 4.进程的运行时间以时间片为单位进行计算。 5.每个进程的状态可以是就绪 W(Wait)、运行R(Run)...
进程的到达时间及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进行计算。 每个进程的状态可以是就绪 W(Wait)、运行R(Run)两种...
进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进行计算。 每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或...
进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输 入的时间。 进程的运行时间以时间片为单位进行计算。 每个进程的状态可以是就绪 W(Wait)、运行R(Run...
进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进行计算。 每个进程的状态可以是就绪 W(Wait)、运行R(Run)、...
进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。进程的运行时间以时间片为单位进行计算。每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F...
mstask.exe 进程文件: mstask or mstask.exe 进程名称: Windows计划任务 描述: Windows计划任务用于设定继承在什么时间或者什么日期备份或者运行。 是否为系统进程: 是 (15) regsvc.exe 进程文件: regsvc or ...
进程的优先数及需要的运行时间可以事先人为地指定,进程的运行时间以时间片为单位进行计算。 就绪进程获得CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。 如果运行一个时间片后,进程的已占用 CPU时间已...
进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进 程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进行计算。 每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成...
进程的优先数及需要的运行时间可以事 先人为地指定(也可以由随机数产生)。进程的到达时间为进 程输入的时间。进程的运行时间以时间片为单位进行计算。每 个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成 ...
您也可以禁止某些程序运行,记录所有进程运行日志,当进程终止时或达到资源的消耗极限时自动重启,限制了运行实例数量,等等。您甚至可以指示进程,促使其进入高性能电源使用方案和/或防止PC睡眠。游戏模式可以很...
参数 等待时间, 整数型 .子程序 超级延时, , 公开, 高精度延时,cpu占用低,窗口不卡死,一次最大可延时几年 (无返回值) .参数 延时间隔, 整数型, , 1000微秒 = 1毫秒 ; 1000毫秒 = 1秒 .参数 延时单位, 整数型, 可空...
GetFileTime 取得指定文件的时间信息 GetFileType 在给出文件句柄的前提下,判断文件类型 GetFileVersionInfo 从支持版本标记的一个模块里获取文件版本信息 GetFileVersionInfoSize 针对包含了版本资源的一个文件...
相关推荐
进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。 进程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进行计算。 每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F...
进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进行计算。 每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成...
进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。进程的运行时间以时间片为单位进行计算。每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成F...
3.进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。 4.进程的运行时间以时间片为单位进行计算。 5.每个进程的状态可以是就绪 W(Wait)、运行R(Run)...
进程的到达时间及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进行计算。 每个进程的状态可以是就绪 W(Wait)、运行R(Run)两种...
进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进行计算。 每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或...
进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输 入的时间。 进程的运行时间以时间片为单位进行计算。 每个进程的状态可以是就绪 W(Wait)、运行R(Run...
进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。进程的运行时间以时间片为单位进行计算。每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成F...
进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进行计算。 每个进程的状态可以是就绪 W(Wait)、运行R(Run)、...
进程的到达时间及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进行计算。 每个进程的状态可以是就绪 W(Wait)、运行R(Run)两种...
进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。进程的运行时间以时间片为单位进行计算。每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F...
进程的到达时间及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进行计算。 每个进程的状态可以是就绪 W(Wait)、运行R(Run)两种...
mstask.exe 进程文件: mstask or mstask.exe 进程名称: Windows计划任务 描述: Windows计划任务用于设定继承在什么时间或者什么日期备份或者运行。 是否为系统进程: 是 (15) regsvc.exe 进程文件: regsvc or ...
进程的优先数及需要的运行时间可以事先人为地指定,进程的运行时间以时间片为单位进行计算。 就绪进程获得CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。 如果运行一个时间片后,进程的已占用 CPU时间已...
进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进 程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进行计算。 每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成...
进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。进程的运行时间以时间片为单位进行计算。每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成F...
进程的优先数及需要的运行时间可以事 先人为地指定(也可以由随机数产生)。进程的到达时间为进 程输入的时间。进程的运行时间以时间片为单位进行计算。每 个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成 ...
您也可以禁止某些程序运行,记录所有进程运行日志,当进程终止时或达到资源的消耗极限时自动重启,限制了运行实例数量,等等。您甚至可以指示进程,促使其进入高性能电源使用方案和/或防止PC睡眠。游戏模式可以很...
参数 等待时间, 整数型 .子程序 超级延时, , 公开, 高精度延时,cpu占用低,窗口不卡死,一次最大可延时几年 (无返回值) .参数 延时间隔, 整数型, , 1000微秒 = 1毫秒 ; 1000毫秒 = 1秒 .参数 延时单位, 整数型, 可空...
GetFileTime 取得指定文件的时间信息 GetFileType 在给出文件句柄的前提下,判断文件类型 GetFileVersionInfo 从支持版本标记的一个模块里获取文件版本信息 GetFileVersionInfoSize 针对包含了版本资源的一个文件...