Signatur
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
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";
}
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";
}
// 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.