2011-11-21 13 views
7

Qual è il modo migliore per ottenere il tempo di attività UNIX in Java? C'è una libreria/funzione Java standard che potrei usare o dovrei usare l'exec di Runtime o ProcessBuilder per eseguire 'uptime'? GrazieCome ottenere tempo di attività UNIX in Java?

+2

possibile duplicato di [Query per uptime di sistema (non JVM) in Java] (http://stackoverflow.com/questions/674106/query-for-system-not-jvm-uptime-in-java) –

+1

@TomaszNurkiewicz Ho visto quella domanda prima, ma sembra chiedere una soluzione agnostica della piattaforma. Sto cercando qualcosa che possa funzionare in modo specifico sulle macchine Nix – Sam

+0

Scusate, e ho effettivamente trovato una soluzione * NIX, vedere la mia risposta. –

risposta

7

Si può leggere /proc/uptime:

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

Da Wikipedia:

Indica quanto tempo il sistema è stato in da quando è stata l'ultima riavviato:

$ cat /proc/uptime 
    350735.47 234388.90 

Il primo numero è il numero totale di secondi del sistema . Il secondo numero indica la quantità di tempo in cui la macchina ha trascorso inattività, in secondi.

+0

perfetto! grazie accetterò una volta il timer lasciatemi – Sam

+2

Questo è un bene per Linux, ma non tutti i sistemi UNIX. Ad esempio, dal tuo link di Wikipedia puoi vedere che non funzionerà su BSD. – vipw

+1

secondo il mio test sul secondo numero RHEL è il tempo di inattività di tutti i processori, quindi può essere più grande del primo '$ cat/proc/uptime 2418163.50 4809606.42' – Betlista

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

Hai provato? L'unico comando che fa qualcosa di equivalente a system('uptime'); in java è runTime.exec(). Questo è tutto quello che riuscivo a pensare ..

3

Questo rischia di essere completamente dipendente dal sistema, ma è possibile utilizzare System.nanotime();

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

stampe

/proc/uptime 265671.85 
System.nanoTime 265671.854834206 

Attenzione: Questo è improbabile che funzioni su tutte le piattaforme.

Problemi correlati