Signatur
Beschreibung
posix_times() liefert ein assoziatives Array mit CPU-Zeitverbrauchswerten des aktuellen Prozesses und seiner beendeten Kindprozesse, gemessen in sogenannten Ticks (Systemtakteinheiten, üblicherweise 1/100 Sekunde auf den meisten Systemen). Die Funktion basiert auf dem POSIX-Systemaufruf times().
Das zurückgegebene Array enthält fünf Schlüssel: ticks (verstrichene Zeit seit einem systemspezifischen Referenzzeitpunkt), utime (User-Mode-Zeit des aktuellen Prozesses), stime (Kernel-Mode-Zeit des aktuellen Prozesses), cutime (User-Mode-Zeit aller beendeten Kindprozesse) und cstime (Kernel-Mode-Zeit aller beendeten Kindprozesse).
Die Funktion ist nützlich, wenn man den CPU-Verbrauch eines PHP-Skripts oder seiner Unterprozesse messen möchte – beispielsweise für Performance-Analysen, Ressourcenüberwachung oder das Logging von Laufzeitstatistiken in langlebigen CLI-Skripten.
Hinweis: Die Funktion setzt eine POSIX-kompatible Umgebung voraus (Linux, macOS etc.) und ist unter Windows nicht verfügbar. Die PHP-Erweiterung ext/posix muss aktiviert sein.
Rückgabewert
Bei Erfolg wird ein assoziatives Array mit folgenden Schlüsseln zurückgegeben:
ticks– Verstrichene Ticks seit einem systemspezifischen Zeitpunkt (oft dem Systemstart).utime– Im User-Mode verbrauchte Ticks des aktuellen Prozesses.stime– Im Kernel-Mode verbrauchte Ticks des aktuellen Prozesses.cutime– Im User-Mode verbrauchte Ticks aller beendeten Kindprozesse.cstime– Im Kernel-Mode verbrauchte Ticks aller beendeten Kindprozesse.
Bei einem Fehler wird false zurückgegeben.
Beispiele
CPU-Verbrauch eines Skripts messen
<?php
$start = posix_times();
// Simulierter rechenintensiver Vorgang
$result = 0;
for ($i = 0; $i < 1_000_000; $i++) {
$result += sqrt($i);
}
$end = posix_times();
$ticksPerSecond = 100; // Typischerweise 100 auf Linux-Systemen (sysconf(_SC_CLK_TCK))
$userTime = ($end['utime'] - $start['utime']) / $ticksPerSecond;
$kernelTime = ($end['stime'] - $start['stime']) / $ticksPerSecond;
echo sprintf(
"User-Zeit: %.4f s, Kernel-Zeit: %.4f s\n",
$userTime,
$kernelTime
);
Alle Zeitwerte ausgeben
<?php
$times = posix_times();
if ($times === false) {
echo "Fehler beim Abrufen der Prozesszeiten.\n";
} else {
echo "Ticks seit Systemreferenz : " . $times['ticks'] . "\n";
echo "User-Mode (aktuell) : " . $times['utime'] . " Ticks\n";
echo "Kernel-Mode (aktuell) : " . $times['stime'] . " Ticks\n";
echo "User-Mode (Kindprozesse) : " . $times['cutime'] . " Ticks\n";
echo "Kernel-Mode (Kindprozesse): " . $times['cstime'] . " Ticks\n";
}
// Wichtig · Fallstricke
Die Anzahl der Ticks pro Sekunde ist systemabhängig und beträgt auf den meisten Linux-Systemen 100 (ermittelbar über posix_sysconf(POSIX_SC_CLK_TCK) oder den Shell-Befehl getconf CLK_TCK). Dieser Wert sollte nicht hart kodiert werden, wenn Portabilität gefordert ist.
Verfügbarkeit: Unter Windows ist die Funktion nicht verfügbar, da die ext/posix-Erweiterung nur auf POSIX-kompatiblen Betriebssystemen funktioniert. Der Einsatz empfiehlt sich primär in CLI-Skripten; im Web-Kontext ist microtime() oft die bessere Wahl für Zeitmessungen.