2010-06-18 16 views

Antwort

21

Via top oder über uptime, aber ich weiß nicht, über jede syscall, jemand wird sicher :)

uptime sollte ziemlich einfach sein analysieren.

stolperte in diese:

#include <sys/sysinfo.h> 

struct sysinfo info; 
sysinfo(&info); 
printf("Uptime = %ld\n", info.uptime); 
+1

Horray für sysinfo() :) NB: 'struct sysinfo' ist ziemlich" shifty "zwischen 2.4 (früh) 2.4 (spät) und 2.6. Wenn Ihr Code wahrscheinlich für Appliances verwendet wird, sollten Sie Build-Prüfungen durchführen, um festzustellen, welche Elemente sich möglicherweise unterscheiden. –

+0

printf ("Betriebszeit:% 02ld:% 02ld:% 02ld \ n", info.uptime/3600, info.uptime% 3600/60, info.uptime% 60); –

+0

"' scheint jedoch nicht zu existieren, wenn Sie den Kernel kompilieren (vagrant & trusty64):/Wie geht es in dieser Situation? – Emixam23

2

Wenn seine dort und enthält das Element uptime, struct sysinfo die bevorzugte Art und Weise ist, wie Jack explained zu gehen.

Der andere Weg ist, btime aus /proc/stat zu lesen, dann subtrahieren Sie es nur von der aktuellen Zeit. btime ist nur eine UNIX-Epoche, die anzeigt, wann der Kernel gebootet hat.

Das gibt Ihnen die Anzahl der Sekunden seit dem Hochfahren, die Sie dann in Jahre/Monate/Tage/Stunden/etc. übersetzen können. Dies erspart den Umgang mit Strings in /proc/uptime. Wenn btime nicht vorhanden ist und struct sysinfo kein Mitglied mit dem Namen uptime hat, müssen Sie /proc/uptime analysieren.

Für moderne Kernel, sysinfo() sollte gut funktionieren. Die meisten Dinge, die immer noch 2.4 (oder früher) in freier Wildbahn laufen, sind Appliances irgendeiner Art oder andere eingebettete Systeme.

1

Um die Startzeit des Systems in einer portabeleren Weise zu erhalten, wäre es, "who -b" zu verwenden. Um dies in einem Programm zu verwenden, müssten Sie eine Shell erstellen und deren Ausgabe interpretieren. Leider scheint dies der einzige Ort zu sein, wo solche Informationen in POSIX verfügbar sind, und dies auch nur als Erweiterung.