Linux에서 "가동 시간"은 언제 시작됩니까?

Linux에서 "가동 시간"은 언제 시작됩니까?

내 컴퓨터는 다음과 같이 말합니다.

$ uptime
 10:20:35 up  1:46,  3 users,  load average: 0,03, 0,10, 0,13

확인해 보면 last다음과 같습니다.

reboot   system boot  3.19.0-51-generi Tue Apr 12 08:34 - 10:20  (01:45)    

그런 다음 확인합니다.

$ ls -l /var/log/boot.log 
-rw-r--r-- 1 root root 4734 Apr 12 08:34 boot.log

그렇다면 /var/log/syslog오늘 첫 번째 줄은 다음과 같습니다.

Apr 12 08:34:39 PC... rsyslogd: [origin software="rsyslogd" swVersion="7.4.4" x-pid="820" x-info="http://www.rsyslog.com"] start

8:34그래서 모든 것이 내 컴퓨터가 부팅되는 시간 에 초점을 맞추는 것 같습니다 .

하지만 알고 싶습니다. 구체적인 시간은 uptime언제입니까 ? uptime특정 파일을 시작하고 확인하는 프로세스 입니까 , 아니면 하드웨어에 관한 것입니까?

저는 우분투 14.04를 실행하고 있습니다.

답변1

내 시스템의 가동 시간은 다음과 같습니다 /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

~에서절차 매뉴얼 페이지:

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

proc 파일 시스템에는 의사 파일 세트가 포함되어 있습니다. 이는 실제 파일이 아니며 파일처럼 보이지만 커널에서 직접 제공하는 값을 포함합니다. 예를 들어 파일을 읽을 때마다 /proc/uptime해당 내용이 즉시 재생성됩니다. proc 파일 시스템은 커널에 대한 인터페이스입니다.


Linux 커널 소스 코드에서 이 파일 fs/proc/uptime.c은 다음과 같습니다.49호선, 함수 호출이 표시됩니다.

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

이것은proc 파일 시스템 항목호출하고 uptime(procfs는 일반적으로 아래에 설치됨 /proc) 해당 의사 파일에 대한 유효한 파일 작업을 정의하는 함수와 이와 관련된 기능을 연결합니다. 가동시간의 경우, 그것은 바로 read()작동 입니다 open(). 그러나 이러한 기능을 추적하면 다음과 같이 끝납니다.여기, 가동 시간이 계산됩니다.


내부적으로 시스템 가동 시간(다른 값 중)을 주기적으로 업데이트하는 타이머 인터럽트가 있습니다. 타이머 인터럽트 타이밍의 시간 간격은 전처리기 매크로에 의해 정의되며 HZ정확한 값은 커널에 정의됩니다.구성 파일컴파일 타임에 적용됩니다.

유휴 시간과 CPU 주기를 HZ빈도(초당 주기)와 결합하여 마지막 부팅 이후의 시간(초)을 계산합니다.


문제를 해결하세요:"가동 시간"은 언제 시작됩니까?

가동 시간은 주기마다 증가하는 커널 내부 값이므로 커널이 초기화될 때 계산되기 시작합니다. 즉, 첫 번째 사이클이 종료되는 시점입니다. 어떤 것이 설치되기 전, 부트로더가 커널 이미지에 제어권을 넘겨준 후에도 마찬가지입니다.

답변2

내가 아는 한, 시스템 가동 시간을 계산하는 uptime데 사용됩니다 . /proc/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);
    }

답변3

표준 UNIX 시스템(원본 소스* 기준)에서 마지막 재부팅 항목의 시간을 uptime읽고 확인합니다./var/adm/utmpx

즉, 이것은 또한 얻은 날짜를 검색 who -b한 다음 그 이후의 시간을 계산하는 것입니다.

*)는 1980년경 BSD에 의해 소개된 uptime이 프로그램에 대한 링크입니다 .w

관련 정보