Start · Sprachen · PHP · Referenz · posix_getsid

posix_getsid

Funktion

Gibt die Session-ID (SID) des Prozesses mit der angegebenen Prozess-ID zurück.

seit PHP 4.0.0 Kategorie: misc

Signatur

posix_getsid(int $process_id): int|false

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

Typ
int|false
Beschreibung
Gibt die Session-ID als Integer zurück. Im Fehlerfall (z. B. wenn kein Prozess mit der angegebenen PID existiert) wird 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 des aktuellen Prozesses: 12345

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;
}
Prozess 9876 gehört zur Sitzung mit der SID 12345.

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;
}
Der aktuelle Prozess (PID: 9876) ist NICHT der Session Leader. SID: 12345.

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