Mein Computer sagt:
$ uptime
10:20:35 up 1:46, 3 users, load average: 0,03, 0,10, 0,13
Und wenn ich nachschaue, last
sehe ich:
reboot system boot 3.19.0-51-generi Tue Apr 12 08:34 - 10:20 (01:45)
Und dann überprüfe ich:
$ ls -l /var/log/boot.log
-rw-r--r-- 1 root root 4734 Apr 12 08:34 boot.log
Dann sehe ich in /var/log/syslog
der ersten Zeile von heute:
Apr 12 08:34:39 PC... rsyslogd: [origin software="rsyslogd" swVersion="7.4.4" x-pid="820" x-info="http://www.rsyslog.com"] start
Alles scheint also in 8:34
der Zeit zusammenzufallen, in der meine Maschine hochgefahren ist.
Ich frage mich jedoch: Was ist die genaue Zeit uptime
verwendet? Ist uptime
ein Prozess, der startet und prüft eine Datei oder ist es etwas auf der Hardware?
Ich verwende Ubuntu 14.04.
linux
linux-kernel
uptime
fedorqui
quelle
quelle
systemd-analyze blame
enthält auch die Zeit vor dem Kernel init, zumindest auf UEFI.Antworten:
Auf meinem System erhält es die Betriebszeit von
/proc/uptime
:Aus der Proc-Manpage :
Das proc-Dateisystem enthält eine Reihe von Pseudodateien. Dies sind keine echten Dateien, sie sehen nur aus wie Dateien, enthalten jedoch Werte, die direkt vom Kernel bereitgestellt werden. Jedes Mal, wenn Sie eine Datei lesen, wie z. B.
/proc/uptime
, wird der Inhalt sofort neu generiert. Das proc-Dateisystem ist eine Schnittstelle zum Kernel.Im Linux-Kernel-Quellcode der Datei
fs/proc/uptime.c
in Zeile 49 sehen Sie einen Funktionsaufruf:Dadurch wird ein Proc-Dateisystemeintrag mit dem Namen
uptime
(der Procfs wird normalerweise unter gemountet/proc
) erstellt und ihm eine Funktion zugeordnet, die gültige Dateioperationen für diese Pseudodatei und die ihnen zugeordneten Funktionen definiert. Im Falle einer Betriebszeit ist es gerechtread()
undopen()
betriebsbereit. Wenn Sie jedoch die Funktionen zurückverfolgen, gelangen Sie hierher , wo die Betriebszeit berechnet wird.Intern gibt es einen Timer-Interrupt, der die Systemverfügbarkeit (neben anderen Werten) regelmäßig aktualisiert. Das Intervall, in dem der Timer-Interrupt tickt, wird vom Präprozessor-Makro festgelegt
HZ
, dessen genauer Wert in der Kernel- Konfigurationsdatei definiert und zur Kompilierungszeit angewendet wird.Die Leerlaufzeit und die Anzahl der CPU-Zyklen in Kombination mit der Frequenz
HZ
(Zyklen pro Sekunde) können in einer Anzahl (in Sekunden) seit dem letzten Start berechnet werden.Um Ihre Frage zu beantworten: Wann beginnt die Betriebszeit zu zählen?
Da es sich bei der Betriebszeit um einen kerninternen Wert handelt, der bei jedem Zyklus anhakt, beginnt er zu zählen, wenn der Kernel initialisiert wurde. Das heißt, wenn der erste Zyklus beendet ist. Noch bevor etwas gemountet wird, gibt der Bootloader direkt die Kontrolle über das Kernel-Image.
quelle
So lange ich weiß, wird
uptime
verwendet/proc/uptime
, um die Systemverfügbarkeit zu berechnen. Sie können es deutlicher im Quellcode uptime.c sehenquelle
/proc/uptime
aus der Betriebszeit berechnet wird.uptime
Liest/var/adm/utmpx
und prüft auf einem Standard-UNIX-System (basierend auf den Originalquellen *) den letzten Neustarteintrag.Mit anderen Worten: Dies ruft das Datum ab, das Sie auch mit erhalten,
who -b
und berechnet dann die Zeit seitdem.*)
uptime
ist ein Link zumw
Programm und wurde von BSD um 1980 eingeführt.quelle
/var/adm/utmpx
in meinem System finden. In der Tat, nicht einmal/var/adm
w
Implementierung verwendet wird, ist dies der Fall, aber Linux macht normalerweise etwas andere Dinge.uptime
Befehl nicht fest, geschweige denn, wie er implementiert werden soll. AFAICT, OS / X hat auch kein / var / adm / utmpx. Einige Linux-basierte Systeme sind nach Unix zertifiziert.