So setzen Sie Prozessprioritäten mit nice and renice unter Linux

Mit den Befehlen nice und renice lässt sich die Art und Weise, wie der Kernel Prozesse behandelt, sehr genau anpassen, indem man deren Prioritäten verändert. In diesem Tutorial erfahren Sie, wie diese Befehle in Linux und Unix-ähnlichen Systemen wie macOS eingesetzt werden.

Die Bedeutung von Prozessen

Auf Ihrem Linux- oder Unix-basierten Rechner laufen zahlreiche Prozesse, noch bevor Sie die eigentliche Anwendung starten. Viele dieser Prozesse sind grundlegende Bestandteile von Linux selbst oder unterstützen Ihre grafische Desktop-Umgebung. Im Hintergrund geschieht also vieles. Da die Systemressourcen und CPU-Zeit jedoch begrenzt sind, ist der Linux-Kernel dafür verantwortlich, diese Prozesse zu verwalten.

Der Kernel entscheidet, welche Prozesse gerade Ressourcen und Aufmerksamkeit erhalten und welche warten müssen. Er jongliert ständig mit Prozessen und Prioritäten, um einen möglichst reibungslosen Betrieb zu gewährleisten. Einige Prozesse werden dabei bevorzugt behandelt, da sie für das Funktionieren des Computers so wichtig sind, dass ihre Bedürfnisse beispielsweise Vorrang vor Ihrem Browser haben.

Der „Nice“-Wert

Eines der Kriterien, nach denen der Kernel einen Prozess behandelt, ist der sogenannte „Nice“-Wert. Jeder Prozess hat einen solchen Wert, der als ganze Zahl zwischen -19 und 20 definiert ist. Standardmäßig starten alle Prozesse mit einem Nice-Wert von Null.

Der Kernpunkt ist: Je höher der Nice-Wert, desto „netter“ ist der Prozess zu den anderen. Ein hoher Nice-Wert signalisiert dem Kernel, dass dieser Prozess gerne warten kann. Eine negative Zahl hingegen bedeutet das Gegenteil. Je negativer der Nice-Wert, desto „egoistischer“ ist der Prozess, da er versucht, so viel CPU-Zeit wie möglich zu erhalten, ohne Rücksicht auf andere Prozesse.

Der Befehl nice wird verwendet, um den Nice-Wert beim Start eines Prozesses zu setzen, während renice den Nice-Wert eines bereits laufenden Prozesses anpasst.

Der Befehl „nice“

Mit nice können wir den Nice-Wert eines Programms beim Start verändern, wodurch wir die Priorität, die der Kernel dem Prozess einräumt, relativ zu anderen Prozessen erhöhen oder verringern können.

Nehmen wir an, ein Programmierer hat ein Programm namens „ackermann“ geschrieben, welches Ackermann-Funktionen berechnet und daher sehr rechen- und speicherintensiv ist. Der Programmierer kann das Programm mit folgendem Befehl starten:

./ackermann

Mit dem Befehl top können wir das laufende Programm beobachten:

top

Hier sehen wir die Details des Programms „ackermann“. Der Nice-Wert in der „NI“-Spalte ist 0, was der Standard ist.

Starten wir das Programm erneut, aber dieses Mal mit einem geringeren Anspruch auf Ressourcen. Wir setzen den Nice-Wert auf 15. Dazu geben wir nice, ein Leerzeichen, -15, ein weiteres Leerzeichen und dann den Namen des Programms ein. In unserem Beispiel verwenden wir ./ackermann:

nice -15 ./ackermann

Beachten Sie, dass „-15“ nicht minus fünfzehn, sondern positiv fünfzehn ist. Das Minuszeichen ist notwendig, um nice mitzuteilen, dass wir einen Parameter übergeben. Um eine negative Zahl anzugeben, benötigen wir zwei Minuszeichen.

Wenn wir nun wieder top ausführen, sehen wir die Veränderung im Verhalten von „ackermann“:

top

Mit einem Nice-Wert von 15 beansprucht „ackermann“ nicht mehr die meiste CPU-Zeit. GNOME und Rhythmbox verbrauchen nun mehr Ressourcen. Wir haben „ackermann“ also etwas „gezügelt“.

Machen wir nun das Gegenteil und geben „ackermann“ einen negativen Nice-Wert. Beachten Sie die Verwendung von zwei Minuszeichen. Um eine Anwendung egoistischer zu machen, benötigen wir sudo, da jeder eine Anwendung netter machen kann, aber nur Superuser sie egoistischer machen können.

sudo nice --10 ./ackermann

Führen wir top erneut aus:

top

Diesmal hat „ackermann“ einen Nice-Wert von -10. Es ist wieder an der Spitze und beansprucht mehr CPU-Zeit als zuvor.

Der Befehl „renice“

Mit dem Befehl renice können wir den Nice-Wert eines laufenden Prozesses anpassen, ohne ihn stoppen und neu starten zu müssen. Wir können den Wert also direkt ändern.

renice verwendet die Prozess-ID (PID) als Parameter. Die PID kann entweder aus der „PID“-Spalte von top oder mithilfe von ps und grep ermittelt werden. Ersetzen Sie dabei „dave“ durch Ihren Benutzernamen und „ackermann“ durch den Namen des Prozesses, an dem Sie interessiert sind.

ps -eu dave | grep ackermann

Mit der PID können wir renice verwenden. Setzen wir „ackermann“ wieder auf einen netteren Wert von 5. Um den Nice-Wert eines laufenden Prozesses zu ändern, ist ebenfalls sudo erforderlich. Beachten Sie, dass der Parameter 5 kein Minuszeichen enthält. Für positive Zahlen ist keins erforderlich, und für negative Zahlen nur eines.

sudo renice -n 5 2339

Wir erhalten eine Bestätigung, dass renice den Nice-Wert geändert hat, zusammen mit dem alten und neuen Wert.

Der Kernel verwaltet normalerweise Prozessprioritäten und die Verteilung von CPU-Zeit und Systemressourcen sehr gut. Wenn Sie jedoch eine lange, rechenintensive Aufgabe ausführen und es Ihnen nicht eilt, kann es hilfreich sein, den Nice-Wert für diesen Prozess zu erhöhen, um die Reaktionsfähigkeit des Systems zu verbessern, was im Endeffekt für alle „netter“ ist.