Um zu wissen, wann ein Prozess gestartet wurde, war meine erste Vermutung, die Zeit zu überprüfen, zu der /proc/<pid>/cmdline
das letzte Mal geschrieben / geändert wurde.
ps
zeigt auch ein START
Feld. Ich dachte, diese beiden Quellen wären gleich. Manchmal sind sie nicht dasselbe. Wie kann das sein?
Antworten:
Zumindest unter Linux können Sie auch Folgendes tun:
um eine nützlichere Startzeit zu haben.
Beachten Sie jedoch, dass dies der Zeitpunkt ist, zu dem der Prozess gestartet wurde, und nicht unbedingt der Zeitpunkt, zu dem der Befehl , den er gerade ausführt, aufgerufen wurde. Prozesse können (und tun dies im Allgemeinen) mehr als einen Befehl in ihrer Lebensdauer ausführen. Und Befehle erzeugen manchmal andere Prozesse.
Die mtimes der Dateien in
/proc
Linux (zumindest) sind im Allgemeinen das Datum, an dem diese Dateien instanziiert wurden. Dies ist das erste Mal, dass versucht wird, auf sie zuzugreifen oder den Verzeichnisinhalt aufzulisten.Zum Beispiel:
Durch das Erweitern wurde
/proc/$$/xx*
die Shell zum Lesen des Inhalts/proc/$$
veranlasst, durch den diecmdline
Datei instanziiert wurde.Siehe auch: Zeitstempel des Sockets in / proc // fd
quelle
proc ist ein virtuelles Dateisystem, daher würde ich mich nicht auf Dateistatusinformationen verlassen.
Die Startzeit des Prozesses befindet sich in Spalte 22 / proc / PID / stat . Es ist in Sekundenschnelle nach dem Systemstart gegeben. Um wandeln es in Sekunden müssen Sie es durch dividieren denen 100 für die meisten Systeme (aber nicht alle!).
sysconf(_SC_CLK_TCK)
Um die Zeit des Systemstarts zu ermitteln, bestimmen Sie die aktuelle Betriebszeit in Sekunden. Dies ist der erste Wert von / proc / uptime .
Mit diesen beiden Zahlen subtrahieren Sie die erste von der zweiten und Sie erhalten die Anzahl der Sekunden, die seit dem Start des Programms vergangen sind.
Beispiel (für Pidgin ):
Hinweis: Dieses einfache Beispiel funktioniert nicht, wenn
pidof
mehrere PIDs zurückgegeben werden.quelle