Start · Sprachen · PHP · Referenz · posix_times

posix_times

Funktion

Gibt die aktuellen Prozess-Rechenzeiten (Ticks) des laufenden Prozesses und seiner Kindprozesse zurück.

seit PHP 4.0.0 Kategorie: misc

Signatur

posix_times(): array|false

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

Typ
array|false
Beschreibung

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
);
User-Zeit: 0.0200 s, Kernel-Zeit: 0.0000 s

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";
}
Ticks seit Systemreferenz : 123456789 User-Mode (aktuell) : 12 Ticks Kernel-Mode (aktuell) : 3 Ticks User-Mode (Kindprozesse) : 0 Ticks Kernel-Mode (Kindprozesse): 0 Ticks

// 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.