times(2) Abfrage der Prozesszeiten

ÜBERSICHT

#include <sys/times.h>

clock_t times(struct tms *buf);

BESCHREIBUNG

times() speichert die aktuellen Prozesszeiten in der Struktur tms, auf die buf weist. Die tms-Struktur wird in <sys/times.h> wie folgt definiert:

struct tms {
   clock_t tms_utime;  /* Benutzer-Zeit */
   clock_t tms_stime;  /* System-Zeit */
   clock_t tms_cutime; /* Benutzer-Zeit der Kindprozesse */
   clock_t tms_cstime; /* System-Zeit der Kindprozesse */
};

Das Feld tms_utime enthält die CPU-Zeit, die mit dem Ausführen von Anweisungen des aufrufenden Prozesses verbracht wurde. Das Feld tms_stime enthält die im System verbrachte CPU-Zeit während der Ausführung von Aufgaben im Namen des aufrufenden Prozesses. Das Feld tms_cutime enthält die Summe der tms_utime- und tms_cutime -Werte für alle Kindprozesse, auf deren Abschluss gewartet wurde. Das Feld tms_cstime enthält die Summe der tms_stime- und tms_cstime-Werte für alle Kindprozesse, auf deren Abschluss gewartet wurde.

Zeiten für beendete Kindprozesse (und ihre Nachkommen) werden in dem Moment hinzugefügt, wenn wait(2) oder waitpid(2) deren Prozess-IDs zurückgeben. Insbesondere werden die Zeiten der Enkel, auf die die Kinder nicht gewarten haben, nicht erfasst.

Alle Zeiten werden in Uhrticks angegeben.

RÜCKGABEWERT

times() gibt die Zahl der Ticks an, die seit einem beliebigen Punkt in der Vergangenheit abgelaufen sind. Der Rückgabewert kann den möglichen Bereich von Typ clock_t überlaufen. Tritt ein Fehler auf, wird (clock_t) -1 zurückgegeben und errno entsprechend gesetzt.

FEHLER

EFAULT
tms zeigt außerhalb des adressierbaren Adressraums des Prozesses.

KONFORM ZU

POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD.

ANMERKUNGEN

Die Zahl der Uhrticks pro Sekunde kann wie folgt bestimmt werden:

sysconf(_SC_CLK_TCK);

In POSIX.1-1996 wird das Symbol CLK_TCK (definiert in <time.h>) als veraltet erwähnt. Es ist jetzt überholt.

Falls in Linux-Kernel-Versionen vor 2.6.9 die Disposition von SIGCHLD auf SIG_IGN eingestellt ist, werden die Zeiten der beendeten Kindprozesse automatisch in den Feldern tms_cstime und tms_cutime eingetragen, obwohl POSIX.1-2001 sagt, dass dies nur geschehen soll, wenn der aufrufende Prozess (mit wait(2)) auf seine Kindprozesse wartet. Diese Nichtübereinstimmung wurde in Linux 2.6.9 und später behoben.

Unter Linux kann das Argument buf als NULL angegeben werden, worauf times() nur ein Funktionsergebnis zurückgibt. Dieses Verhalten wird aber nicht von POSIX beschrieben und die meisten UNIX-Implementierungen erfordern einen von NULL verschiedenen Wert für buf.

Beachten Sie, dass auch clock(3) einen Wert vom Typ clock_t zurückgibt. Die Maßeinheit für diesen Wert ist CLOCKS_PER_SEC, nicht die von times() verwendeten Uhrticks.

Unter Linux hat sich der »beliebige Punkt in der Vergangenheit«, auf den sich der Rückgabewert von times () bezieht, über die Kernel-Versionen geändert. Unter Linux 2.4 und früher war dieser Punkt der Moment, an dem das System gestartet wurde. Seit Linux 2.6 ist dieser Punkt (2^32/HZ) - 300 Sekunden vor Systemstart. Diese Variabilität zwischen Kernel-Versionen (und über UNIX-Implementierungen) und die Tatsache, dass der Rückgabewert den Bereich clock_t überlaufen lassen kann, bedeutet, dass eine portable Anwendung klug daran tut, diesen Wert nicht zu verwenden. Um Änderungen der verstrichenen Zeit zu messen, verwenden Sie stattdessen clock_gettime(2).

Historisches

SVr1-3 gibt long zurück und Bestandteile der Struktur sind vom Typ time_t, obwohl sie Uhrticks speichern und nicht Sekunden seit dem Beginn der Unix-Zeit. V7 verwendete long für die Bestandteile der Struktur, weil es damals noch keinen Typ time_t gab.

FEHLER

Eine Beschränkung in den Linux-Konventionen für Systemaufrufe für einige Architekturen (insbesondere i386) bewirkt unter Linux 2.6 ein kleines Zeitfenster (41 Sekunden) kurz nach dem Systemstart, in dem times() -1 zurückgeben und damit fälschlicherweise anzeigen kann, dass ein Fehler auftrat. Dasselbe Problem kann auftreten, wenn der Rückgabewert den größten in clock_t speicherbaren Wert überschreitet.

KOLOPHON

Diese Seite ist Teil der Veröffentlichung 4.06 des Projekts Linux-man-pages. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

Die deutsche Übersetzung dieser Handbuchseite wurde von Ralf Demmer <[email protected]>, Martin Eberhard Schauer <[email protected]> und Mario Blättermann <[email protected]> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an <[email protected]>.