Signatur
Beschreibung
posix_getsid() liefert die Session-ID des Prozesses, dessen PID als Parameter übergeben wird. Wird 0 übergeben, wird die Session-ID des aktuell laufenden PHP-Prozesses zurückgegeben. Die Session-ID ist unter POSIX-Systemen die PID des Sitzungsführers (Session Leader), also desjenigen Prozesses, der die Sitzung gestartet hat.
Eine Prozess-Sitzung (process session) ist ein übergeordnetes Konzept, das eine Gruppe zusammengehöriger Prozessgruppen zusammenfasst. Sie wird typischerweise beim Login eines Benutzers erzeugt und umfasst alle von dieser Shell gestarteten Prozesse. Jeder Prozess gehört genau einer Sitzung an.
Die Funktion ist nützlich bei Systemprogrammierung mit PHP, z. B. wenn Daemons, Worker-Prozesse oder Child-Prozesse überwacht oder gesteuert werden müssen. Sie entspricht dem POSIX-C-Aufruf getsid().
Diese Funktion steht nur auf POSIX-kompatiblen Betriebssystemen (Linux, macOS, BSD) zur Verfügung und ist unter Windows nicht verfügbar. Gegebenenfalls muss die POSIX-Erweiterung aktiviert sein.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $process_id Pflicht | int | Die Prozess-ID (PID), deren Session-ID ermittelt werden soll. Wird 0 übergeben, wird die Session-ID des aktuellen Prozesses zurückgegeben. |
Rückgabewert
false zurückgegeben. Der genaue Fehler kann mit posix_get_last_error() und posix_strerror() abgerufen werden.Beispiele
Session-ID des aktuellen Prozesses ermitteln
<?php
$sid = posix_getsid(0);
if ($sid === false) {
$errno = posix_get_last_error();
echo 'Fehler: ' . posix_strerror($errno) . PHP_EOL;
} else {
echo 'Session-ID des aktuellen Prozesses: ' . $sid . PHP_EOL;
}
Session-ID eines bestimmten Prozesses ermitteln
<?php
// PID eines bekannten Prozesses (z. B. über posix_getpid() eines Child-Prozesses)
$pid = posix_getpid();
$sid = posix_getsid($pid);
if ($sid !== false) {
echo sprintf(
'Prozess %d gehört zur Sitzung mit der SID %d.' . PHP_EOL,
$pid,
$sid
);
} else {
echo 'Session-ID konnte nicht ermittelt werden: ' . posix_strerror(posix_get_last_error()) . PHP_EOL;
}
Prüfen, ob ein Prozess Session Leader ist
<?php
$pid = posix_getpid();
$sid = posix_getsid($pid);
if ($sid === $pid) {
echo 'Der aktuelle Prozess (PID: ' . $pid . ') ist der Session Leader.' . PHP_EOL;
} else {
echo 'Der aktuelle Prozess (PID: ' . $pid . ') ist NICHT der Session Leader. SID: ' . $sid . PHP_EOL;
}
// Wichtig · Fallstricke
Plattformabhängigkeit: posix_getsid() ist nur auf POSIX-kompatiblen Systemen verfügbar (Linux, macOS, BSD). Unter Windows führt der Aufruf zu einem fatalen Fehler, da die POSIX-Erweiterung dort nicht unterstützt wird.
Fehlerbehandlung: Bei einer ungültigen oder nicht existierenden PID gibt die Funktion false zurück. Nutze posix_get_last_error() in Kombination mit posix_strerror(), um den genauen POSIX-Fehlercode zu ermitteln.
Daemon-Programmierung: In typischen Daemon-Implementierungen wird nach einem fork() und dem Aufruf von posix_setsid() im Kind-Prozess eine neue Sitzung erstellt. Mit posix_getsid(0) lässt sich anschließend verifizieren, dass der Child-Prozess tatsächlich Session Leader der neuen Sitzung ist.