Start · Sprachen · PHP · Referenz · posix_getpgid

posix_getpgid

Funktion

Gibt die Prozessgruppen-ID (PGID) eines Prozesses anhand seiner PID zurück.

seit PHP 4.2.0 Kategorie: misc

Signatur

posix_getpgid(int $process_id): int|false

Beschreibung

posix_getpgid() ermittelt die Prozessgruppen-ID (Process Group ID, PGID) des Prozesses mit der angegebenen Prozess-ID (PID). Prozessgruppen sind ein fundamentales Konzept der POSIX-Job-Kontrolle: Mehrere Prozesse können zu einer Gruppe zusammengefasst werden, um Signale gemeinsam zu empfangen oder um sie als Einheit zu steuern (z. B. in Shell-Pipelines).

Die Funktion ist besonders nützlich in Anwendungen, die Daemon-Prozesse, Multiprocessing oder Signal-Handling einsetzen. Mit der zurückgegebenen PGID lässt sich beispielsweise prüfen, ob ein Kindprozess noch zur selben Prozessgruppe wie der Elternprozess gehört, oder ob er bereits eine eigene Sitzung gestartet hat.

Beachte, dass diese Funktion nur auf POSIX-kompatiblen Systemen verfügbar ist (Linux, macOS, BSD usw.). Unter Windows steht sie nicht zur Verfügung. Um die PGID des aktuellen Prozesses zu erhalten, kann die eigene PID über posix_getpid() übergeben werden.

Parameter

Name Typ Default Beschreibung
$process_id Pflicht int Die Prozess-ID (PID) des Prozesses, dessen Prozessgruppen-ID ermittelt werden soll. Um die PGID des aktuellen PHP-Prozesses zu erhalten, kann posix_getpid() als Argument übergeben werden.

Rückgabewert

Typ
int|false
Beschreibung
Gibt die Prozessgruppen-ID (PGID) als int zurück. Im Fehlerfall (z. B. wenn die angegebene PID nicht existiert oder keine Berechtigung besteht) wird false zurückgegeben. Der genaue Fehler kann anschließend mit posix_get_last_error() und posix_strerror() abgerufen werden.

Beispiele

PGID des aktuellen Prozesses ermitteln

<?php
// Eigene PID des laufenden PHP-Prozesses
$pid = posix_getpid();

// Prozessgruppen-ID des aktuellen Prozesses abrufen
$pgid = posix_getpgid($pid);

if ($pgid !== false) {
    echo "PID:  $pid" . PHP_EOL;
    echo "PGID: $pgid" . PHP_EOL;
} else {
    $errno = posix_get_last_error();
    echo "Fehler: " . posix_strerror($errno) . PHP_EOL;
}
PID: 12345 PGID: 12300

PGID eines Kindprozesses nach fork() prüfen

<?php
$pid = pcntl_fork();

if ($pid === -1) {
    die('fork() fehlgeschlagen');
} elseif ($pid === 0) {
    // Kindprozess: eigene Session starten
    posix_setsid();
    $childPid  = posix_getpid();
    $childPgid = posix_getpgid($childPid);
    echo "Kindprozess  PID:  $childPid" . PHP_EOL;
    echo "Kindprozess  PGID: $childPgid" . PHP_EOL;
    exit(0);
} else {
    // Elternprozess
    $parentPid  = posix_getpid();
    $parentPgid = posix_getpgid($parentPid);
    echo "Elternprozess PID:  $parentPid" . PHP_EOL;
    echo "Elternprozess PGID: $parentPgid" . PHP_EOL;

    // Warten bis Kindprozess beendet ist
    pcntl_wait($status);
}
Elternprozess PID: 12345 Elternprozess PGID: 12300 Kindprozess PID: 12346 Kindprozess PGID: 12346

// Wichtig · Fallstricke

Plattformabhängigkeit: posix_getpgid() steht ausschließlich auf POSIX-kompatiblen Betriebssystemen (Linux, macOS, BSD) zur Verfügung. Unter Windows ist die Funktion nicht definiert und führt zu einem fatalen Fehler. Prüfe vor dem Aufruf mit function_exists('posix_getpgid'), ob die Funktion verfügbar ist.

Erweiterung erforderlich: Die Funktion ist Teil der POSIX-Erweiterung (ext/posix), die in manchen PHP-Builds nicht standardmäßig aktiviert ist. Unter Linux muss ggf. das Paket php-posix installiert werden.

Fehlerbehandlung: Wenn eine ungültige oder nicht existierende PID übergeben wird, gibt die Funktion false zurück. Nutze posix_get_last_error() und posix_strerror(), um den Systemfehler auszulesen.