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