2010-06-18 12 views

Odpowiedz

21

Via top lub poprzez uptime, ale nie wiem o wszelkich syscall, ktoś będzie na pewno :)

uptime powinny być raczej proste do analizowania.

Właśnie natknął się następująco:

#include <sys/sysinfo.h> 

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

Horray for sysinfo() :) Uwaga: 'struct sysinfo' jest raczej 'shifty' między 2.4 (wczesny) 2.4 (późny) i 2.6. Jeśli Twój kod będzie prawdopodobnie używany w urządzeniach, to przydatny do uruchamiania testów kompilacji, aby zobaczyć, którzy członkowie mogą być inni. –

+0

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

+0

Jednakże, '' wydaje się nie istnieć podczas kompilacji jądra (vagrant & trusty64):/Jak to zrobić w tej sytuacji? – Emixam23

2

Jeśli jej tam i zawiera człon uptime, struct sysinfo jest preferowana droga, jak Jack explained.

Innym sposobem jest odczytanie btime z /proc/stat, a następnie odjęcie go od bieżącego czasu. btime to po prostu Epoka UNIX wskazująca, kiedy uruchomiono jądro.

To daje # sekund od uruchomienia, co można następnie przetłumaczyć na lata/miesiące/dni/godziny/itd. To oszczędza konieczności radzenia sobie z ciągami w /proc/uptime. Jeśli nie ma wartości btime, a struct sysinfo nie ma członka o nazwie uptime, musisz przeanalizować kod /proc/uptime.

W przypadku współczesnych ziaren, sysinfo() powinno działać dobrze. Większość rzeczy, które wciąż działają w wersji 2.4 (lub wcześniej) na wolności to urządzenia jakiegoś rodzaju lub inne systemy wbudowane.

1

Aby uzyskać czas uruchomienia systemu w bardziej przenośny sposób, należy użyć "kto -b". Aby użyć tego w programie, musiałbyś odrodzić powłokę i zinterpretować jej wynik. Niestety wydaje się, że jest to jedyne miejsce, w którym taka informacja jest dostępna w POSIX-ie, a to tylko jako rozszerzenie.

Powiązane problemy