2011-11-21 15 views
7

¿Cuál es la mejor manera de obtener el tiempo de actividad de UNIX en Java? ¿Existe una biblioteca/función estándar de Java que pueda usar o debería usar el ejecutor de Runtime o ProcessBuilder para ejecutar 'uptime'? Gracias¿Cómo obtener el tiempo de actividad de UNIX en Java?

+2

posible duplicado del tiempo de actividad de [Consultar por sistema (no JVM) en Java] (http://stackoverflow.com/questions/674106/query-for-system-not-jvm-uptime-in-java) –

+1

@TomaszNurkiewicz Vi esa pregunta antes, pero parece pedir una solución agnóstica de plataforma. Estoy buscando algo que pueda funcionar específicamente en las máquinas Nix – Sam

+0

Lo siento, y de hecho encontré una solución * NIX, ver mi respuesta. –

Respuesta

7

Usted puede leer /proc/uptime:

new Scanner(new FileInputStream("/proc/uptime")).next(); 
//"1128046.07" on my machine and still counting 

De Wikipedia:

muestra el tiempo que el sistema ha estado en desde que se reinició el pasado:

$ cat /proc/uptime 
    350735.47 234388.90 

El primer número es cantidad total de segundos que el sistema ha subido. El segundo número es la cantidad de tiempo que la máquina ha estado inactiva, en segundos.

+0

¡perfecto! gracias, lo aceptaré una vez que el temporizador me deje – Sam

+2

Eso es bueno para Linux, pero no para todos los sistemas UNIX. Puede ver en su enlace de Wikipedia que no funcionará en BSD, por ejemplo. – vipw

+1

de acuerdo con mi prueba en RHEL segundo número es el tiempo de inactividad de todos los procesadores, por lo que puede ser más grande que el primero '$ cat/proc/uptime 2418163.50 4809606.42' – Betlista

3
Runtime.getRuntime().exec('uptime'); 

¿Has probado esto? El único comando que hace algo equivalente a system('uptime'); en java es runTime.exec(). Eso es todo lo que podía pensar ..

3

Ésta es probable que sea totalmente dependiente del sistema, pero se puede utilizar System.nanotime();

System.out.println("/proc/uptime " + new Scanner(new FileInputStream("/proc/uptime")).next()); 
System.out.println("System.nanoTime " + System.nanoTime()/1e9); 

impresiones

/proc/uptime 265671.85 
System.nanoTime 265671.854834206 

Advertencia: Esto es poco probable que funcione en todas las plataformas.

Cuestiones relacionadas