Kiedy rozpoczął się proces


Odpowiedzi:


44

Przynajmniej w systemie Linux możesz także:

ps -o lstart= -p the-pid

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 /procsystemie 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:

$ sh -c 'date +%T.%N; sleep 3; echo /proc/"$$"/xx*; sleep 3; stat -c %y "/proc/$$/cmdline"'
13:39:14.791809617
/proc/31407/xx*
2013-01-22 13:39:17.790278538 +0000

Rozwinięcie /proc/$$/xx*spowodowało odczytanie przez powłokę zawartości, /proc/$$która spowodowała utworzenie cmdlinepliku.

Zobacz także: Znacznik czasu gniazda w / proc // fd


11

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 ):

PID=$(pidof pidgin)
STARTTIME=$(awk '{print int($22 / 100)}' /proc/$PID/stat)
UPTIME=$(awk '{print int($1)}' /proc/uptime)
NOW=$(date +%s)
DIFF=$((NOW - (UPTIME - STARTTIME)))
date -d @$DIFF

Uwaga: ten prosty przykład nie działa, jeśli pidofzwraca wiele PID-ów.


Masz pojęcie, kiedy zapisywane są proc / <pid> / cmdline? cóż, każdy z proc / <pid> wpisów w tym zakresie.
Swair

2
Zwykle pliki te są generowane przez jądro dynamicznie za każdym razem, gdy próbujesz je odczytać, a większość z nich ma również zawartość dynamiczną. cmdline nie robi, ale nie wyobrażam sobie, aby istniała oficjalna polityka, która musi zostać utworzona raz podczas uruchamiania procesu i nigdy więcej nie zostanie zmieniona.
scai

Możesz uzyskać wartość _SC_CLK_TCK z wiersza poleceń, wykonując polecenie „getconf CLK_TCK”
o
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.