Kapitel 8 Rund um die Ausführung von Scripts und Prozessen
Es reicht einfach nicht aus, nur zu wissen, wie man ein Shellscript schreibt, man muss auch wissen, wie man ein Shellscript ausführen kann. Ein Script ausführen im herkömmlichen Sinn kann jeder – doch gibt es verschiedene Möglichkeiten, wie ein oder mehrere Scripts ausgeführt werden können. Viele der hier genannten Themen wurden zwar bereits das ein oder andere Mal angesprochen, jedoch ohne ins Detail zu gehen.
8.1 Prozessprioritäten
 
Bei einem modernen Multitasking-Betriebssystem sorgt ein so genannter Scheduling-Algorithmus (gewöhnlich ein prioritätsgesteuerter Algorithmus) dafür, dass jedem Prozess eine gewisse Zeit die CPU zur Verfügung steht, um seine Arbeit auszuführen – schließlich kann eine CPU letztendlich nur einen Prozess gleichzeitig bearbeiten (auch wenn der Eindruck entsteht, hier würden unzählig viele Prozesse auf einmal verarbeitet). Natürlich hat nicht jeder Prozess die gleiche Priorität. Wenn zum Beispiel ein Prozess eine Systemfunktion aufruft, so besitzt dieser immer eine höhere Priorität. Wobei es sich hierbei um Systemprozesse handelt, auf die Sie keinen Einfluss haben.
Neben den Systemprozessen, deren Priorität Sie nicht beeinflussen können, gibt es noch die Timesharing-Prozesse. Hierbei wird versucht, die CPU-Zeit möglichst gleichmäßig auf alle anderen Prozesse – unter Beachtung der Priorität – zu verteilen. Damit es keine Ungerechtigkeiten gibt, wird die Priorität der Prozesse nach einer gewissen Zeit neu berechnet. Beeinflussen können Sie die Scheduling-Priorität mit dem Kommando nice oder renice. Wenn Sie bspw. die Prozesse mit ps –l auflisten lassen, finden Sie darin einen Wert NI (nice). Diesen Wert können Sie mit einer Priorität belegen: –20 bedeutet die höchste und +19 die niedrigste Priorität. Bei einer Priorität von –20 bedeutet dies, dass der Prozess die CPU bedeutend länger in Anspruch nimmt als ein Prozess mit der Priorität +19. Befehle, die von der Shell gestartet werden, übernehmen dieselbe Priorität wie die Shell.
Wollen Sie bspw. dem Prozess »ein_prozess«, der die PID 1234 besitzt, eine niedrigere Priorität vergeben, können Sie wie folgt vorgehen:
you@host > renice +10 1234
1234: Alte Priorität: 0, neue Priorität: 10
Um dem Prozess eine höhere Priorität zuzuweisen (egal, ob man ihn vorher selbst heruntergesetzt hat), benötigt man Superuser-Rechte. Man kann sich selbst degradieren, aber nicht wieder aufsteigen. Dazu fehlt dem Linux-Kernel ein Feld in der Prozesstabelle, das es erlauben würde, wieder bis zur Originalpriorität aufzusteigen. Wollen Sie den Prozess 1234 wieder erhöhen, könnten Sie so vorgehen (Superuser-Rechte vorausgesetzt):
you@host > su -c 'renice –5 1234'
Password:********
1234: Alte Priorität: 10, neue Priorität: –5
Hinweis Neben der aktuellen Priorität ist die Rechenzeit, die ein Prozess zur Ausführung erhält, auch abhängig von der Anzahl der Prozesse, die »gleichzeitig« auf dem Rechner ausgeführt werden, und natürlich von der Leistung der CPU.
Hinweis Neben den Systemprozessen und den Timesharing-Prozessen gibt es noch die Echtzeit-Prozesse (Real-Time). Diese werden bei besonders zeitkritischen Prozessen eingesetzt, sodass diese dann eine höhere Priorität als die Timesharing-Prozesse besitzen.
|
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.
|