GNU/Linux >> Linux Esercitazione >  >> Linux

Su Linux, da quando inizia a contare il tempo di attività?

Sul mio sistema ottiene il tempo di attività da /proc/uptime :

$ strace -eopen uptime
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/libproc-3.2.8.so", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/proc/version", O_RDONLY)         = 3
open("/sys/devices/system/cpu/online", O_RDONLY|O_CLOEXEC) = 3
open("/etc/localtime", O_RDONLY|O_CLOEXEC) = 3
open("/proc/uptime", O_RDONLY)          = 3
open("/var/run/utmp", O_RDONLY|O_CLOEXEC) = 4
open("/proc/loadavg", O_RDONLY)         = 4
 10:52:38 up 3 days, 23:38,  4 users,  load average: 0.00, 0.02, 0.05

Dalla pagina man proc:

   /proc/uptime
          This file contains two numbers: the uptime of the system
          (seconds), and the amount of time spent in idle process
          (seconds).

Il filesystem proc contiene una serie di pseudo file. Quelli non sono file reali, sembrano solo file, ma contengono valori forniti direttamente dal kernel. Ogni volta che leggi un file, come /proc/uptime , il suo contenuto viene rigenerato al volo. Il filesystem proc è un'interfaccia per il kernel.

Nel codice sorgente del kernel linux del file fs/proc/uptime.c alla riga 49, vedi una chiamata di funzione:

proc_create("uptime", 0, NULL, &uptime_proc_fops);

Questo crea una voce del filesystem proc chiamata uptime (il procfs è solitamente montato sotto /proc ), e vi associa una funzione, che definisce operazioni di file valide su quello pseudo file e le funzioni ad esse associate. In caso di uptime è solo read() e open() operazioni. Tuttavia, se rintracci le funzioni, finirai qui, dove viene calcolato il tempo di attività.

Internamente è presente un timer-interrupt che aggiorna periodicamente l'uptime dei sistemi (oltre ad altri valori). L'intervallo, in cui il timer-interrupt ticchetta, è definito dalla macro-preprocessore HZ , il cui valore esatto è definito nel file di configurazione del kernel e applicato al momento della compilazione.

Il tempo di inattività e il numero di cicli della CPU, combinati con la frequenza HZ (cicli al secondo) può essere calcolato in un numero (di secondi) dall'ultimo avvio.

Per rispondere alla tua domanda:Da quando inizia a contare il "tempo di attività"?

Poiché il tempo di attività è un valore interno del kernel, che aumenta a ogni ciclo, inizia a contare quando il kernel è stato inizializzato. Cioè, quando il primo ciclo è terminato. Anche prima che qualsiasi cosa venga montata, subito dopo che il bootloader ha dato il controllo all'immagine del kernel.


Per quanto ne so, uptime usa /proc/uptime per calcolare il tempo di attività del sistema. Puoi vederlo più chiaramente nel codice sorgente uptime.c

  FILE *fp;

  fp = fopen ("/proc/uptime", "r");
  if (fp != NULL)
    {
      char buf[BUFSIZ];
      char *b = fgets (buf, BUFSIZ, fp);
      if (b == buf)
        {
          char *end_ptr;
          double upsecs = c_strtod (buf, &end_ptr);
          if (buf != end_ptr)
            uptime = (0 <= upsecs && upsecs < TYPE_MAXIMUM (time_t)
                      ? upsecs : -1);
        }

      fclose (fp);
    }

Su un sistema UNIX standard (basato sui sorgenti originali *), uptime legge /var/adm/utmpx e controlla l'ultima volta che è stato immesso il riavvio.

In altre parole:recupera la data che ottieni anche con who -b e quindi calcola il tempo trascorso da allora.

*) uptime è un collegamento al w programma ed è stato introdotto da BSD intorno al 1980.


Linux
  1. Linux:come avviare una partizione di Windows dalla riga di comando di Grub?

  2. Come posso impedire l'avvio automatico dei servizi Linux?

  3. È possibile simulare l'assenza di accesso esterno da una macchina Linux durante lo sviluppo?

  4. Installa Linux da Linux

  5. Linux - Come posso vedere quando è iniziato un processo?

Comando Uptime in Linux

Passaggio da Windows a Linux

Come accelerare il processo di compilazione durante l'installazione di pacchetti da AUR

Documentare il tempo di attività del sistema in Linux

Esempi di comandi per l'uptime di Linux

In che modo Linux distingue i thread dai processi figlio?