Witam!
Uruchamiam proces w mojej aplikacji Java.
Process runtime = Runtime.getRuntime().exec("java -Xmx"+args[4]+"M -Xms64M -jar craftbukkit-dev.jar -p "+args[3]+" -s "+args[5] , null, new File("/home/craftfield/"+args[2]));
Potem pobieram PID (linux) i chce sprawdzić obciążenie cpu i ram tą aplikacjią>
Field f = process.getClass().getDeclaredField("pid");
f.setAccessible(true);
int pid = f.getInt(process);
String exec = "top -b -n 1 -p "+pid+" | awk 'NR>7 && NR<9 {printf $9}'";
Process top = Runtime.getRuntime().exec(exec);
BufferedReader in = new BufferedReader(new InputStreamReader(top.getInputStream()));
String line = in.readLine();
System.out.println(line);
Jednak Program zwraca null. W konsoli polecenie top -b -n 1 -p "+pid+" | awk 'NR>7 && NR<9 {printf $9}' działa. Tak samo jak w javie działa
String exec = "top -b -n 1 -p "+pid;
Process top = Runtime.getRuntime().exec(exec);
Jest jakiś lepszy sposób pobierania informacji o obciążeniu cpu i ram?
Idealnie by było gdyby istniała taka funkcja:
int cpu = process.getCPU();