Aby wiedzieć, kiedy rozpoczął się proces, najpierw zgadywałem, kiedy sprawdzono, kiedy /proc/<pid>/cmdline
ostatni raz został napisany / zmodyfikowany.
ps
pokazuje również START
pole. Myślałem, że oba te źródła będą takie same. Czasami nie są takie same. Jak to możliwe?
Odpowiedzi:
Przynajmniej w systemie Linux możesz także:
mieć bardziej przydatny czas rozpoczęcia.
Należy jednak pamiętać, że jest to czas, w którym proces został rozpoczęty, niekoniecznie razem komenda , że aktualnie realizuje została wywołana. Procesy mogą (i generalnie wykonują) wykonywać więcej niż jedno polecenie w ciągu swojego życia. A polecenia czasami spawnują inne procesy.
Czasami plików w
/proc
systemie Linux (przynajmniej) są zazwyczaj daty utworzenia tych plików, co byłoby pierwszą próbą uzyskania do nich dostępu lub wyświetlenia zawartości katalogu.Na przykład:
Rozwinięcie
/proc/$$/xx*
spowodowało odczytanie przez powłokę zawartości,/proc/$$
która spowodowała utworzeniecmdline
pliku.Zobacz także: Znacznik czasu gniazda w / proc // fd
źródło
proc to wirtualny system plików, więc nie polegałbym na żadnych informacjach o stanie pliku.
Czas rozpoczęcia procesu znajduje się w kolumnie / proc / PID / stat 22 . Jest podawany w jiffies po uruchomieniu systemu. Aby przekonwertować go na sekundy, musisz podzielić go przez
sysconf(_SC_CLK_TCK)
100 dla większości systemów (ale nie wszystkich!).Aby uzyskać czas rozruchu systemu, określ bieżący czas działania w sekundach, który jest pierwszą wartością / proc / uptime .
Mając te dwie liczby, odejmujesz pierwszą od drugiej i otrzymujesz liczbę sekund, które upłynęły od uruchomienia programu.
Przykład (dla pidgin ):
Uwaga: ten prosty przykład nie działa, jeśli
pidof
zwraca wiele PID-ów.źródło