Start · Sprachen · PHP · Referenz · pcntl_getpriority

pcntl_getpriority

Funktion

Ermittelt die Scheduling-Priorität (Nice-Wert) eines Prozesses anhand seiner PID.

seit PHP 5.0.0 Kategorie: misc

Signatur

pcntl_getpriority(int $process_id = 0, int $mode = PRIO_PROCESS): int|false

Beschreibung

pcntl_getpriority() gibt den aktuellen Nice-Wert eines Prozesses zurück. Der Nice-Wert ist eine ganze Zahl im Bereich von -20 (höchste Priorität) bis +19 (niedrigste Priorität), wobei der Standardwert in der Regel 0 ist. Je niedriger der Wert, desto mehr CPU-Zeit erhält der Prozess vom Betriebssystem-Scheduler zugeteilt.

Wird für process_id der Wert 0 übergeben, bezieht sich die Abfrage auf den aktuell laufenden PHP-Prozess selbst. Über den Parameter mode lässt sich steuern, ob die Priorität für einen Prozess (PRIO_PROCESS), eine Prozessgruppe (PRIO_PGRP) oder einen Benutzer (PRIO_USER) abgerufen wird.

Diese Funktion ist besonders nützlich, wenn ressourcenintensive PHP-Skripte (z. B. Batch-Jobs, Bildverarbeitungs-Worker) mit niedrigerer Priorität als interaktive Prozesse laufen sollen und man zunächst den aktuellen Wert auslesen möchte, bevor man ihn mit pcntl_setpriority() anpasst.

Die Funktion steht nur auf Unix-ähnlichen Betriebssystemen (Linux, macOS, BSD) zur Verfügung. Unter Windows ist sie nicht verfügbar. Sie erfordert, dass die pcntl-Erweiterung installiert und aktiviert ist.

Parameter

Name Typ Default Beschreibung
$process_id int 0 Die PID des Prozesses, dessen Priorität abgerufen werden soll. Der Wert 0 steht für den aktuellen Prozess, je nach mode auch für die aktuelle Prozessgruppe oder den aktuellen Benutzer.
$mode int PRIO_PROCESS Gibt an, welcher Typ von Ressource abgefragt wird. Mögliche Werte sind PRIO_PROCESS (einzelner Prozess), PRIO_PGRP (Prozessgruppe) und PRIO_USER (Benutzer).

Rückgabewert

Typ
int|false
Beschreibung
Gibt den Nice-Wert des Prozesses als int zurück (typischerweise zwischen -20 und 19). Im Fehlerfall (z. B. ungültige PID oder fehlende Berechtigung) wird false zurückgegeben und ein E_WARNING ausgelöst.

Beispiele

Priorität des aktuellen Prozesses auslesen

<?php
// Priorität des aktuellen PHP-Prozesses ermitteln
$priority = pcntl_getpriority();
if ($priority === false) {
    echo "Priorität konnte nicht ermittelt werden.\n";
} else {
    echo "Aktuelle Prozess-Priorität (Nice-Wert): " . $priority . "\n";
}
Aktuelle Prozess-Priorität (Nice-Wert): 0

Priorität prüfen und bei Bedarf anpassen

<?php
// Priorität des aktuellen Prozesses ermitteln
$currentPriority = pcntl_getpriority(0, PRIO_PROCESS);

if ($currentPriority === false) {
    echo "Fehler beim Abrufen der Priorität.\n";
    exit(1);
}

echo "Aktuelle Priorität: " . $currentPriority . "\n";

// Nur anpassen, wenn Prozess noch keine niedrige Priorität hat
if ($currentPriority < 10) {
    $result = pcntl_setpriority(10, 0, PRIO_PROCESS);
    if ($result) {
        echo "Priorität wurde auf 10 (niedrig) gesetzt.\n";
        echo "Neue Priorität: " . pcntl_getpriority() . "\n";
    } else {
        echo "Priorität konnte nicht geändert werden (ggf. fehlende Rechte).\n";
    }
} else {
    echo "Priorität ist bereits niedrig genug.\n";
}
Aktuelle Priorität: 0 Priorität wurde auf 10 (niedrig) gesetzt. Neue Priorität: 10

Priorität einer anderen PID über Prozessgruppe abfragen

<?php
// PID der aktuellen Prozessgruppe ermitteln
$pgid = posix_getpgrp();
$priority = pcntl_getpriority($pgid, PRIO_PGRP);

if ($priority !== false) {
    echo "Priorität der Prozessgruppe (PGID {$pgid}): " . $priority . "\n";
} else {
    echo "Priorität der Prozessgruppe konnte nicht ermittelt werden.\n";
}
Priorität der Prozessgruppe (PGID 1234): 0

// Wichtig · Fallstricke

Plattform: Diese Funktion ist ausschließlich auf Unix-artigen Betriebssystemen verfügbar (Linux, macOS, BSD). Unter Windows steht sie nicht zur Verfügung.

Berechtigungen: Das Abfragen der Priorität fremder Prozesse kann je nach Betriebssystem Root-Rechte oder spezielle Capabilities erfordern. Ohne ausreichende Rechte gibt die Funktion false zurück.

Rückgabe von 0 vs. false: Da der Wert 0 ein gültiger Nice-Wert ist, muss der Rückgabewert zwingend mit dem Typvergleich === false geprüft werden, um Fehler von einem tatsächlichen Nice-Wert von 0 zu unterscheiden.

CLI vs. Web: Die Funktion sollte nur in CLI-Skripten verwendet werden. Im Web-Kontext (z. B. Apache/FPM) sind Prozessmanipulationen aus Sicherheitsgründen unerwünscht und häufig eingeschränkt.