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