Benutzer-Werkzeuge

Webseiten-Werkzeuge


edv:os:unix:shell:tipps_und_tricks:prozesse

Inhaltsverzeichnis

Prozesse

…überwachen und steuern.

ps

ps zeigt (eigene) laufende Prozesse an.

Prozesse aller User mit Usernamen in BSD-Syntax (Parameter ohne Minuszeichen):

ps auxw

In Unix-Syntax (Parameter mit Minuszeichen):

ps -auxw

wobei:

  • 'a' (all) - nicht nur eigene, sondern Prozesse aller User anzeigen.
  • 'u' (user) - mit Usernamen.
  • 'x' (extend) - auch Prozesse anzeigen, die außerhalb der aktuellen Shell laufen (also alle Prozesse).
  • 'w' (wide) - breite (nicht abgeschnittene) Ausgabe.

Weitere Optionen:

  • '-u' (user, Unix-Syntax) - Ausgabe nur auf den angegebenen User beschränken.
  • '-f' - Ausgabe inklusive Startzeit und vollständigem Programmaufruf.

Alle Prozesse vom User "juergen" anzeigen lassen:

ps -fu juergen

Alle Prozesse vom Programm "skype" anzeigen lassen:

ps -C skype

Ausgabe besteht aus mehreren Spalten:

  • USER - selbsterklärend.
  • PID - die Prozess-ID.
  • %CPU - die durch den Prozess verursachte CPU-Last in %.
  • COMMAND - selbsterklärend.
  • TIME - kumulierte CPU-Zeit, die der Prozess in Anspruch genommen hat.
  • START - der Zeitpunkt, als der Prozess gestartet wurde.
  • RSS - "Resident Set Size" sagt, wie viel physischer Speicher der Prozess belegt (inklusive aktuell geladenen Libraries). Diese Angaben kann sich im Laufe des Prozesses ständig variieren.
    (Da die Libraries von mehreren Prozessen gemeinsam verwendet werden, kann die Summe der RSS-Werte aller Prozesse größer sein, als der RAM des Rechners.)
  • %MEM - belegter Speicher prozentual zu dem Gesamtspeicher.
  • VSZ - "Virtual Set Size" - der gesamte Speicher, den der Prozess (zumindest teoretisch) nutzen kann.
  • STAT - Prozess-Status. Die Buchstaben haben folgende Bedeutung:
    • 'S' steht für schlafende Prozesse;
    • 's' für Session Leader (der erste Prozess einer Session);
    • 'l' für "hat Threads";
    • '+' für Prozesse im Vordergrund;
    • 'R' für laufende Prozesse;
    • 'N' und '<' zeigen eine verminderte oder erhöhte Priorität an;
    • 'T' für pausierte Prozesse;
    • 'L' kennzeichnet Echtzeit-Prozesse, die Speicherbereiche blockiert haben;
    • 'X' - tote Prozesse;
    • 'Z' - Zombies - halbtote Kindprozesse, die von ihrem Elternprozess nicht sauber abgeräumt wurden;

Welche Spalten angezeigt werden sollen, lässt sich mit der Option '-o' festlegen. Zum Beispiel mit:

ps -A -o pid,user,cmd

…lässt sich die Ausgabe auf die o.g. drei Spalten beschränken.

Welche Spalten möglich sind, findet man heraus in den ManPages unter der Überschrift "Standard Format Specifiers".

Die Liste lässt sich mit der Option "–sort" sortiert ausgeben. Mit z.B. "–sort -%cpu" wird die Prozessliste so sortiert, dass die rechenintensivsten Prozesse oben stehen.

Prozessliste als Baum (mit Abhängigkeiten) ausgeben:

ps axjf

pstree

Übersichtlichere Ausgabe, aber mit weniger Details:

pstree

top

Live-Anzeige der gerade laufenden Prozessen (nach CPU-Last sortiert) ruft man mit top auf. Mit [Shift+F] wird der Konfigurationsdialog aufgerufen (mit [Leertaste] Spalten an-/abwählen, mit [S] als Sorierfeld markieren, mit [Q] Dialog beenden).

Das SunOS-Pendant dazu heißt prstat:

prstat -a

kill

Prozess beenden - mit "kill", z.B. den Prozess 1234 beenden:

kill 1234

Der Prozess 1234 erhält dadurch das Signal "SIGTERM" und sollte sich beenden. (Dieses Signal kann durch das Programm selbst behandelt werden.)

Das Kommando "killall" erwartet den Prozessnamen statt die PID. So werden alle laufenden Instanzen von "skype" beendet:

killall skype

Wenn ein Prozess auf "SIGTERM" nicht reagiert, hilft die nächste Stufe - "SIGKILL". Dieses Signal kann vom Prozess nicht behandelt werden und führt zum sofortigen Abbruch des Prozesses (wahrscheinlich auch mit Datenverlust). Hier ein Beispiel:

kill -KILL 1234

Statt "-KILL" darf der numerische Wert des Signall "SIGKILL" (9) genutzt werden:

kill -9 1234

Weitere Tipps

Von dem "top" aus schickt man das "SIGTERM"-Signal mit der Taste [K] mit darauf folgenden Eingabe der PID.

Mit htop (farbige Darstellung) kann man über die Taste [F9] kann man sogar auswählen (mit Kursortasten), welches Signal an den Prozess gesendet wird.

Alle Prozesse eines Users (hier "juergen") rücksichtslos abbrechen (das '='-Zeichen verhindert die Spaltenüberschrift PID):

ps -u juergen -o pid= | xargs sudo kill -9

Einen Prozess im Hintergrund starten. Dafür muss man am Ende der Befehlszeile das '&'-Zeichen setzen:

avconv -i ./original.mkv -c:v libx264 -c:a copy ./umkodiert.mp4 &

Bei dem Aufruf vorangestelltes nohup verhindert, dass beim Schließen des Terminals alle aus diesem Terminal gestarteten Prozesse beendet werden.

Hintergrundprozesse auflisten (ab 1 durchnummeriert):

jobs

Das gleiche, nur mit PIDs:

jobs -l

Hintergrundprozess Nr. 2 (aus der "jobs"-Ausgabe) mit "kill" beenden:

kill %2

Das laufende Programm aus dem Vordergrund in den Hintergrund schicken:

  • Mit [Strg+Z] unterbrechen (pausieren)
  • Mit dem Befehl bg in den Hintergrund schieben

Das zuletzt in den Hintergrund geschicke Programm wieder in den Vordergrund holen:

fg

…oder mit der Angabe (nach dem "fg") der Nummer des Hintergrundprozesses (aus der "jobs"-Liste) einen beliebigen Hintergrundprozess nach Vorne holen:

fg 2

Stand: 30.01.2017

EOF

edv/os/unix/shell/tipps_und_tricks/prozesse.txt · Zuletzt geändert: 2020/01/11 01:23 von 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki