Linux Shell – Arbeiten mit Prozessen

Ich bin grade im Schreibfieber, daher schiebe ich den zweiten Blog mal gleich nach.

Es handelt sich hierbei nur um einen kleinen Abriss des Themas. Ich gehe nur auf die Bereiche ein, die man im Linux-Alltag durchaus brauchen kann. Speziell wenn einem mal ein Programm hängen bleibt oder in einer Schleife festsitzt.

Ein Prozess ist ein Programm, welches gerade auf dem System ausgeführt wird. In der Windows Welt werden Prozesse als Tasks bezeichnet. Dort gibt es auch den Taskmanager, den man durch kurzes drücken der Tasten STRG + ALT + ENTF (der sog. Affengriff) aufrufen kann.
Linux Desktop Umgebungen wie Gnome oder KDE bieten ebenfalls solche grafischen Tools. Bei Gnome z.B. findet man die Prozessübersicht im Gnome Menü unter System -> Systemüberwachung -> Prozesse.

In der Linux Shell gibt es auch einen Prozessmanager, der den grafischen ähnelt. Er lässt sich mit dem Befehl “top” aufrufen. Ist das Programm gestartet sieht man eine tabellarische Auflistung der Prozesse, bis man das Programm beendet.
Das Programm wird durch Eingabe von Buchstaben gesteuert.
h – Zeigt die Hilfe an, in der alle weiteren Befehle aufgelistet werden.
q – Beendet das Programm.

Ich nutze “top” selbst nicht, da man mit den konventionellen Befehlen meist schneller arbeiten kann. Daher kann ich auch keine genaueren Informationen dazu geben.

Auflisten der Prozesse mit “ps”
Der grundlegende Befehl für Prozesse. “ps” gibt eine Liste der Prozesse aus, die zum Zeitpunkt der Eingabe laufen. Gibt man den Befehl ohne zusätzliche Optionen an, werden nur die Prozesse des aktuellen Terminals und vom Benutzer, der den Befehl eingegeben hat, angezeigt.
Die Liste zeigt die Prozess-ID (PID), den Terminal (TTY), die Zeit und den Befehl des Prozesses an.
Die PID ist dabei interessant, diese braucht man, um einen Prozess zu beenden.

Um den Befehl jedoch effektiv zu nutzen, hängt man noch zwei Optionen an, die direkt hintereinander geschrieben werden können. “ps ax” Zeigt alle Prozesse an die auf dem System laufen, egal auf welchen Terminal und egal welchem Benutzer sie gehören.
Da die Ausgabe dieses Befehls meist sehr lang ist, bietet sich hier “grep” an. Wenn man also ungefähr (oder ganz genau) den Namen eines Programms weiß, das Probleme macht, dann kann man somit sehr schnell arbeiten.
ps ax | grep <suchwort>” zeigt also nur Prozesse an, deren Befehl das <suchwort> enthält.

Ein Hinweis zum Suchwort. Wer ein bisschen mit dem Befehl gearbeitet hat, dem wird auffallen, dass der Befehl des Prozesses, den “ps” anzeigt und nach dem ich mit “grep” suchen kann, den ganzen Pfad und die Optionen einer Anwendung anzeigt. Also beim Browser Firefox steht z.B. “/usr/lib/firefox-3.0/firefox” anstatt nur einfach “firefox“.
D.h. ich kann also auch nach Pfaden suchen. Mir also alle laufenden Programme anzeigen lassen die im Verzeichnis “/usr/lib” liegen.

Einen Prozess terminieren mit “kill”
Hat man die Prozess-ID (PID) eines Prozesses ermittelt, so kann man diesen mit “kill <pid>” beenden.
Da man diesen Schritt eigentlich nur ausführt, wenn das betreffende Programm hängt, sollte man das Beenden des Prozesses erzwingen. Dies geschieht mit “kill -9 <pid>“.
Danach empfiehlt es sich nochmals “ps ax | grep <suchwort>” zu bemühen um zu sehen ob alles ordnungsgemäß funktioniert hat.

Einen Prozess terminieren mit “killall”
Achtung: Diesen Befehl sollte man nicht benutzen, da unbeabsichtigt mehrere Prozesse beendet werden können. Die Methode “ps” und “kill” sollten immer bevorzugt werden.

Der Syntax dieses Befehls lautet “killall <name>”. Dabei werden alle Prozesse beendet deren Befehl <name> enthält. Das Filter-Verhalten ist dabei mit dem von “grep” zu vergleichen.
Geht man unachtsam mit diesem Befehl um, kann es schnell passieren, dass Prozesse beendet werden bei denen das nicht beabsichtigt war.
Der “kill” Befehl ist wesentlich sicherer, auch wenn es mehr Tipparbeit ist.

Das sind die grundlegendsten und wichtigsten Befehle zu Prozessen. Den folgenden Befehl benötigt man eher selten, dennoch kann er bei speziellen Anwendungen wichtig sein.

Ein Programm mit einer bestimmten Priorität starten mit “nice”
Die Priorität eines Prozesses legt fest, wie viel Rechenzeit dem Prozess zur Verfügung steht. Normalerweise legt der Kernel die Priorität eines Prozesses fest. Bei bestimmten Anwendungen, besonders wenn sehr viel Rechenleistung benötigt wird, kann man die Priorität steigern.
Das geschieht beim Starten des Programms, indem der Befehl “nice” vorangestellt wird. Genau sieht das dann so aus:
“nice -20 wine WoW.exe”.
Hier wird das Online-Rollenspiel World of Warcraft mit Hilfe von Wine mit höchster Priorität gestartet.
Dieses Beispiel ist zwar etwas speziell, es handelt sich dabei jedoch um eine praktische Anwendung.
Wie gesagt steht die “-20” hier für die höchste Priorität, die niedrigste wäre 19. Es verhält sich also umgekehrt zum Vorzeichen. Die Standard-Priorität ist 10, nachzulesen in der Hilfe des Befehls.

Hinweis:
Um die Priorität eines Prozesses zu erfahren, muss man “ps l” ausführen. Oder besser “ps axl”.
ps” zeigt dann mehr Spalten an. Die Spalte PRI gibt Auskunft über die Priorität des Prozesses. Nicht wundern wenn dort eine 20 steht. Diese Prozesse schlafen, daher keine Rechenzeit.
(Zu sehen an dem S in der Spalte STAT.

Die Priorität eines Prozesses zur Laufzeit ändern mit “renice”
Die Priorität lässt sich auch jederzeit zur Laufzeit eines Prozesses ändern. Hierfür muss man aber vorher die Prozess-ID ermitteln. (siehe “ps”)
Hat man das getan, kann man mit “renice <priorität> <pid>” die Priorität ändern.
Wer “top” benutzt kann mit der “r” Taste den selben Effekt erzielen.

Das sind die Grundlagen, wirklich nur angerissen. Ich werden ein anderes Mal noch auf den Prozess-Status und weitere Dinge eingehen.

This entry was posted in Linux and tagged , , , , , , , , , , . Bookmark the permalink.

2 Responses to Linux Shell – Arbeiten mit Prozessen

  1. lala says:

    Sehr hilfreich, danke🙂

  2. Pingback: Fehlermeldung exit signal Segmentation fault (11) - Server Support Forum

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s