Start · Sprachen · PHP · Referenz · posix_getppid

posix_getppid

Funktion

Gibt die Prozesskennung (PID) des Elternprozesses des aktuellen PHP-Prozesses zurück.

seit PHP 4.0.0 Kategorie: misc

Signatur

posix_getppid(): int

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

Typ
int
Beschreibung
Gibt die Prozesskennung (PID) des Elternprozesses als positive Ganzzahl zurück. Gibt der Elternprozess die PID 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;
Aktuelle PID: 12345 Elternprozess-PID: 12300

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
}
Elternprozess PID: 12300 Geforkte Kind-PID: 12345 Kindprozess PID: 12345 Elternprozess-PID: 12300

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