Signatur
Beschreibung
posix_getppid() gibt die sogenannte Parent Process ID (PPID) zurück – also die Prozesskennung des Prozesses, der den aktuellen PHP-Prozess gestartet hat. Bei einem Webserver-Kontext ist das in der Regel der Webserver-Worker-Prozess, bei CLI-Skripten typischerweise die Shell oder ein übergeordnetes Skript.
Die Funktion ist besonders nützlich in Szenarien, in denen Prozesskontrolle benötigt wird, etwa beim Schreiben von Daemon-Prozessen, beim Überwachen von Prozessketten oder beim Debugging von Fork-basierten Architekturen. Zusammen mit posix_getpid() ermöglicht sie eine vollständige Sicht auf die Prozesshierarchie.
Die Funktion ist Teil der POSIX-Erweiterung und steht daher nur auf POSIX-konformen Betriebssystemen (Linux, macOS, BSD etc.) zur Verfügung. Unter Windows ist sie nicht verfügbar.
Rückgabewert
1 zurück, so wurde der aktuelle Prozess direkt vom Init-Prozess (z. B. systemd) übernommen – dies kann auf einen verwaisten Prozess hinweisen.Beispiele
Eigene PID und Eltern-PID ausgeben
<?php
// Gibt die eigene PID und die PID des Elternprozesses aus
$pid = posix_getpid();
$ppid = posix_getppid();
echo "Aktuelle PID: {$pid}" . PHP_EOL;
echo "Elternprozess-PID: {$ppid}" . PHP_EOL;
Einfacher Fork mit Identifikation von Kind- und Elternprozess
<?php
// Demonstriert die Nutzung von posix_getppid() nach einem Fork
$pid = pcntl_fork();
if ($pid === -1) {
die('Fork fehlgeschlagen.');
} elseif ($pid === 0) {
// Kindprozess
echo "Kindprozess PID: " . posix_getpid() . PHP_EOL;
echo "Elternprozess-PID: " . posix_getppid() . PHP_EOL;
exit(0);
} else {
// Elternprozess
echo "Elternprozess PID: " . posix_getpid() . PHP_EOL;
echo "Geforkte Kind-PID: {$pid}" . PHP_EOL;
pcntl_wait($status); // Auf Kind warten
}
// Wichtig · Fallstricke
Plattformabhängigkeit: posix_getppid() ist nur auf POSIX-kompatiblen Systemen verfügbar (Linux, macOS, BSD). Unter Windows steht die Funktion nicht zur Verfügung und führt zu einem fatalen Fehler, wenn die POSIX-Erweiterung nicht geladen ist.
Verwaiste Prozesse: Gibt posix_getppid() den Wert 1 zurück, wurde der Elternprozess bereits beendet und der aktuelle Prozess wurde vom Init-Prozess adoptiert. Dies ist ein typisches Verhalten bei Daemon-Prozessen oder unsauber beendeten Fork-Hierarchien.
Die POSIX-Erweiterung muss aktiviert sein (extension=posix in der php.ini), andernfalls steht die Funktion nicht zur Verfügung.