import java.util.StringTokenizer;
/**
* @author nineday
* 下午04:09:46, 2007-12-10
*/
public class Execute {
//private static final File memFile = new File("/proc/meminfo");
private static final File versionFile = new File("/proc/version");
private static String linuxVersion = null;
static {
InputStreamReader isr = null;
BufferedReader brVer = null;
StringTokenizer tokenVer = null;
try{
isr = new InputStreamReader(new FileInputStream(versionFile));
brVer = new BufferedReader(isr);
tokenVer = new StringTokenizer(brVer.readLine());
tokenVer.nextToken();
tokenVer.nextToken();
String version = tokenVer.nextToken();
linuxVersion = version.subSequence(0, 3).toString();
System.out.println("Linux version:"+linuxVersion);
}catch(Exception e){
e.printStackTrace();
}finally{
freeResource(null, isr, brVer);
}
}
//the test code
public static void main(String[] args) {
try {
float usage = getCUPUsage();
System.out.println("CPU usage: "+usage);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @return between 1 and 0
*/
private static float getCUPUsage(){
InputStream is = null;
InputStreamReader isr = null;
BufferedReader brStat = null;
StringTokenizer tokenStat = null;
try{
System.out.println("Get usage rate of CUP , linux version: "+linuxVersion);
Process process = Runtime.getRuntime().exec("top -b -n 1");
is = process.getInputStream();
isr = new InputStreamReader(is);
brStat = new BufferedReader(isr);
if(linuxVersion.equals("2.4")){
brStat.readLine();
brStat.readLine();
brStat.readLine();
brStat.readLine();
tokenStat = new StringTokenizer(brStat.readLine());
tokenStat.nextToken();
tokenStat.nextToken();
String user = tokenStat.nextToken();
tokenStat.nextToken();
String system = tokenStat.nextToken();
tokenStat.nextToken();
String nice = tokenStat.nextToken();
System.out.println(user+" , "+system+" , "+nice);
user = user.substring(0,user.indexOf("%"));
system = system.substring(0,system.indexOf("%"));
nice = nice.substring(0,nice.indexOf("%"));
float userUsage = new Float(user).floatValue();
float systemUsage = new Float(system).floatValue();
float niceUsage = new Float(nice).floatValue();
return (userUsage+systemUsage+niceUsage)/100;
}else{
brStat.readLine();
brStat.readLine();
tokenStat = new StringTokenizer(brStat.readLine());
tokenStat.nextToken();
tokenStat.nextToken();
tokenStat.nextToken();
tokenStat.nextToken();
tokenStat.nextToken();
tokenStat.nextToken();
tokenStat.nextToken();
String cpuUsage = tokenStat.nextToken();
System.out.println("CPU idle : "+cpuUsage);
Float usage = new Float(cpuUsage.substring(0,cpuUsage.indexOf("%")));
return (1-usage.floatValue()/100);
}
} catch(IOException ioe){
System.out.println(ioe.getMessage());
freeResource(is, isr, brStat);
return 1;
} finally{
freeResource(is, isr, brStat);
}
}
private static void freeResource(InputStream is, InputStreamReader isr, BufferedReader br){
try{
if(is!=null)
is.close();
if(isr!=null)
isr.close();
if(br!=null)
br.close();
}catch(IOException ioe){
System.out.println(ioe.getMessage());
}
}
}