Start · Sprachen · PHP · Referenz · pcntl_errno

pcntl_errno

Funktion

Alias von <code>pcntl_get_last_error()</code> — gibt den Fehlercode des letzten fehlgeschlagenen PCNTL-Funktionsaufrufs zurück.

seit PHP 5.3.4 Kategorie: misc

Signatur

pcntl_errno(): int

Beschreibung

pcntl_errno() ist ein direkter Alias für pcntl_get_last_error() und liefert den numerischen Fehlercode (errno), der beim letzten fehlgeschlagenen Aufruf einer PCNTL-Funktion gesetzt wurde. Dieser Wert entspricht den systemseitigen POSIX-Fehlercodes (z. B. ECHILD, EINVAL etc.).

Die Funktion ist besonders nützlich, wenn Prozesssteuerungs-Funktionen wie pcntl_waitpid(), pcntl_fork() oder pcntl_signal() einen Fehler zurückgeben und man den genauen Grund ermitteln möchte. In Kombination mit pcntl_strerror() lässt sich eine aussagekräftige Fehlermeldung ausgeben.

Da es sich um einen Alias handelt, sind Verhalten und Rückgabewert identisch mit pcntl_get_last_error(). Es empfiehlt sich, für neuen Code bevorzugt den kanonischen Namen pcntl_get_last_error() zu verwenden, da Aliase in zukünftigen PHP-Versionen grundsätzlich entfernt werden könnten.

Rückgabewert

Typ
int
Beschreibung
Gibt den numerischen POSIX-Fehlercode des letzten fehlgeschlagenen PCNTL-Aufrufs zurück. Wenn kein Fehler aufgetreten ist, wird 0 zurückgegeben.

Beispiele

Fehlercode nach fehlgeschlagenem waitpid auslesen

<?php
// Versuche, auf einen nicht existierenden Kindprozess zu warten
$status = 0;
$result = pcntl_waitpid(-99999, $status, WNOHANG);

if ($result === -1) {
    $errno = pcntl_errno();
    $message = pcntl_strerror($errno);
    echo "Fehlercode: $errno\n";
    echo "Fehlermeldung: $message\n";
}
Fehlercode: 10 Fehlermeldung: No child processes

Hilfsfunktion zur PCNTL-Fehlerbehandlung

<?php
function handlePcntlError(string $context): void
{
    $errno = pcntl_errno();
    if ($errno !== 0) {
        $msg = pcntl_strerror($errno);
        fprintf(STDERR, "[%s] PCNTL-Fehler %d: %s\n", $context, $errno, $msg);
    }
}

$pid = pcntl_fork();
if ($pid === -1) {
    handlePcntlError('fork');
    exit(1);
} elseif ($pid === 0) {
    // Kindprozess
    exit(0);
} else {
    // Elternprozess wartet
    pcntl_waitpid($pid, $status);
    handlePcntlError('waitpid');
    echo "Kindprozess $pid beendet.\n";
}
Kindprozess 12345 beendet.

// Wichtig · Fallstricke

Alias-Hinweis: pcntl_errno() ist ein Alias von pcntl_get_last_error(). Es wird empfohlen, für neuen Code pcntl_get_last_error() zu verwenden, da PHP-Aliase in künftigen Versionen ohne Vorwarnung entfernt werden können.

Verfügbarkeit: PCNTL-Funktionen stehen nur auf Unix-artigen Betriebssystemen (Linux, macOS) zur Verfügung und sind in der PHP-CLI üblich. In einem Webserver-Kontext (z. B. Apache/FPM) sind sie in der Regel nicht geeignet und können zu unvorhersehbarem Verhalten führen.

Der zurückgegebene Fehlercode wird nur beim Aufruf einer PCNTL-Funktion aktualisiert — er spiegelt nicht den globalen C-Bibliotheks-errno-Wert wider, sondern einen PHP-internen Wert.