LPIC101/103.5 Prozesse erzeugen, überwachen und beenden

Aus Foxwiki

Ziel: Erlernen, die einfache Prozessverwaltung zu beherrschen.

Wichtigste Wissensgebiete

  • Jobs im Vordergrund und im Hintergrund ablaufen lassen
  • einem Programm signalisieren, dass es nach dem Abmelden weiterlaufen soll
  • Prozesse erzeugen, überwachen und beenden
  • aktive Prozesse beobachten
  • Prozesse zur Ausgabe auswählen und sortieren
  • Signale an Prozesse schicken

Liste wichtiger Dateien, Verzeichnisse und Anwendungen:

  • &
  • bg
  • fg
  • jobs
  • kill
  • nohup
  • ps
  • top
  • free
  • uptime
  • pgrep
  • pkill
  • killall
  • watch
  • screen
  • tmux

Überwachen von Prozessen

Mit dem Kommando ps

können Sie die aktuell auf einem Computer laufenden Prozesse anzeigen. Es handelt sich um eine Momentaufnahme. Programme mit kurzer Lebensdauer (z. B. df), werden mit ps nicht anzeigt. Das Kommando ps ohne Optionen ausführen, erhalten Sie eine Liste der Prozesse, die auf dem aktuellen Terminal laufen. Wenn Jobs im Hintergrund laufen (o. stehen), werden diese auch angezeigt.

  • -a zeigt auch die Prozesse anderer Benutzer an. Voraussetzung ist, dass diese Prozesse mit einem Terminal verknüpft sind.
  • -u zeigt auch die Startzeit, den Pfad zur ausführbaren Datei und den ausführenden Benutzer an.
  • -x führt auch die Prozesse auf, die nicht mit einem Terminal verbunden sind (z. B.init oder cron).
  • -C "prozess" sorgt für die Ausgabe aller Instanzen eines auf der Kommandozeile angegebenen Prozesses.
  • -U "benutzer" zeigt die Prozesse eines bestimmten Benutzers an.

top

Mit top können Sie die auf einem Computer laufenden Prozesse in Echtzeit überwachen. Während der Ausführung werden die folgenden Informationen dynamisch im Terminal ausgegeben:

allgemeine Informationen, wie Uhrzeit, Uptime, Anzahl der angemeldeten Benutzer, durchschnittliche Systemauslastung

Tasks: Anzahl der Prozesse insgesamt, laufende Prozesse, schlafende Prozesse, gestoppte Prozesse und Zombie-Prozesse

CPU(s): Benutzung durch Benutzerprozesse, Systemprozesse, den Idle-Prozess u. a.

Mem: Speicher insgesamt, in Verwendung, freier Speicher und für Buffers verwendeter Speicher

Swap: diverse Werte zur Verwendung der Swap-Partition(en)Anschließend folgt eine Auflistung der laufenden Prozesse. Diese werden standardmäßig in Reihenfolge der CPU-Verwendung ausgegeben. Die inaktiven Prozesse werden anschließend in der Reihenfolge der PIDs ausgegeben. Beachten Sie bitte, dass das Programm top selbst auch Systemressourcen belegt und deshalb das Messergebnis beeinflusst

Wichtige Interaktivoptionen

  • k (kill) tötet einen Prozess. Es müssen sowohl die PID als auch das Signal angegeben werden.
  • n (number of) nennt die Anzahl der Zeilen, die top ausgibt.
  • r (renice) ändert den Nice-Wert eines Prozesses zur Laufzeit.
  • h (help) gibt eine Hilfe aus.
  • q (quit) beendet das Programm.

Wichtige Kommandozeilenoptionen

  • -i zeigt nur die Prozesse an, die aktiv sind. Schlafende Prozesse werden ignoriert.
  • -b (batch) kann in Kombination mit einem Redirektor verwendet werden, um die Ausgabe in eine Textdatei umzuleiten.
  • -d (delay) gibt das Aktualisierungsintervallin Sekunden an. Der Standardwert ist eine Sekunde.
  • -q startet top mit Echtzeitausgabe (wird nicht von allen Versionen des Programms unterstützt).

watch

  • Ein sehr nützlicher Helfer ist das Programm watch.
  • Sie können es immer dann einsetzen, wenn ein anderes Programm eine Ausgabe auf dem Terminal macht und sich dann wieder beendet.
  • Vielleicht wollen Sie z. B. Dateien dabei beobachten, wie diese ihre Größe ändern, während sie kopiert oder von dd erzeugt werden.
  • Es gibt viele Situationen, in denen man mehrfach dasselbe Kommando gibt, um etwas zu beobachten.

Signale an Prozesse senden

Wenn Sie einen Prozess zur Laufzeit beeinflussen wollen, können Sie diesem Prozessein Signal senden. Es gibt insgesamt 64 verschiedene Signale. Die gute Nachricht ist, dass Sie nicht alle Signale für die Prüfung kennen müssen. Sie erhalten eine Auflistung aller Signale, wenn Sie das folgende Kommando ausführen:

# kill -l
1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
5) SIGTRAP      6) SIGABRT      7) SIGBUS       8) SIGFPE
9) SIGKILL     10) SIGUSR1     11) SIGSEGV     12) SIGUSR2
... 

Die folgenden Signale werden häufig (auch manuell) an Prozesse übermittelt. Sie sind sowohl für die Praxis als auch für die Prüfung von Interesse:

1 bzw. SIGHUP ist das Hang-up-Signal, das ursprünglich Modems zum Auflegen veranlasste. Es wird auch benutzt, um Prozesse, die als Daemons laufen (bind, squidusw.), zu veranlassen, ihre Konfigurationsdateien neu einzulesen.

9 bzw. SIGKILL beendet einen Prozess mit Gewalt. Dieses Signal sollte nur in Notfällen verwendet werden, wenn Signal 15 kein Ergebnis bringt. Ein mit SIGKILL beendeter Prozess räumt nicht auf (temporäre Dateien usw.).

15 SIGTERM fordert einen Prozess auf, sich selbst zu beenden. Der Prozess erhält die Gelegenheit, Aufräumaktivitäten durchzuführen. Weitere Signale, die häufig vorkommen, aber über Umwege an den Prozess gesendet werden, sind folgende: 2 bzw. SIGINT führt einen Programmabbruch aus. SIGINT wird gesendet, wenn die Tastenkombination (Strg) + (C) betätigt wird.

18 bzw. SIGCONT setzt einen Prozess fort, der zuvor mit SIGSTOP angehalten wurde.

Das Signal SIGCONT wird durch die Kommandos fg und bg gesendet, die im nächsten Abschnitt behandelt werden.

19 bzw. SIGSTOP hält einen Prozess an. Der Prozess kann später mit SIGCONT fortgesetzt werden.

20 bzw. SIGTSTP hält einen Prozess an. Der Prozess bleibt speicherresident und kann mit SIGCONT fortgesetzt werden. Die Tastenkombination (Strg) + (Z) sendet dieses Signal.

kill

  • Wenn Sie ein Signal an einen Prozess senden wollen, verwenden Sie das Programm kill.
  • Wie der Name schon vermuten lässt, ist kill primär dazu gedacht, ein Programm zu beenden.
  • Das Kommando kill kann aber grundsätzlich alle 64 Signale (und nicht nur die »tödlichen«) an einen Prozess senden.
  • Die Syntax von kill ist sehr vielfältig, und Sie müssen für die Prüfung mit den verschiedenen Optionen vertraut sein.
  • Als Argument erwartet kill eine oder mehrere durch Leerstellen getrennte PIDs. Ohne Optionen sendet kill das Signal 15 (SIGTERM) an den angegebenen Prozess.
  • Wenn Sie einen Prozess mit kill beenden wollen, müssen Sie zunächst dessen PID welche wir mit ps finden.

killall

Dieses Programm verwendet im Gegensatz zu kill keine PIDs, sondern Prozessnamen. Daraus ergeben sich zwei Vorteile:

Die PID muss nicht ermittelt werden.

Es können mehrere Prozesse mit gleichem Namen auf einmal beendet werden.

pgrep

Mit dem Programm pgrep können Sie die PIDs laufender Prozesse ermitteln. Sie müssen hierfür nicht einmal den vollständigen Namen eines Prozesses kennen. Es besteht außerdem die Möglichkeit, alle PIDs auszugeben, die einem bestimmten Benutzer zugeordnet sind, oder einfach nur festzustellen, wie viele Prozesse ein bestimmter Benutzer gerade verwendet.

pkill

Dieses Programm beendet jedoch Prozesse anstatt lediglich die PID auszugeben.Das folgende Kommando beendet alle Prozesse des Users. Das gilt auch für die Login-Shell, weshalb der Benutzer dann auch sofort abgemeldet wird.

jobs

die Option -l dafür sorgt, dass auch die PIDs der Prozesse angezeigt werden und nicht nur deren Jobnummern. Wenn Sie die Option -p verwenden, wird ausschließlich die PID angezeigt.

bg und fg

mit dem Kommando bg und der durch das Kommando jobs ermittelten Jobnummer können Sie einen gestoppten Hintergrundprozess im Hintergrund fortsetzen. Es wird dann ein SIGCONT (Signal 18) an den Prozess gesendet. Wenn Sie bg ohne Optionen ausführen, wird SIGCONT an den Prozess gesendet, dem in der Auflistung von jobs das Pluszeichen zugeordnet ist

screen

  • Sie können administrativen Eingriffe relativ gefahrlos durchführen, wenn Sie ein Programm wie screen oder tmux verwenden. Beide Programme sind in der Lage, eine Sitzung aufrechtzuerhalten, auch wenn die Netzwerkverbindung unterbrochen wird.
  • Am besten sehen Sie, wie es funktioniert, indem Sie folgendes Experiment durchführen:

Starten Sie eine SSH-Sitzung zu einem entfernten Host. Geben Sie einfach nur das Kommando screen ein.

Sie erhalten wieder eine scheinbar gewöhnliche Shell.

Starten Sie einen Prozess, der aktiv etwas tut (z. B. top).

Sorgen Sie anschließend dafür, dass die Verbindung abbricht.

Verbinden Sie sich erneut mit dem entfernten System und geben Sie anschließend das Kommando screen -r ein.

Sie sehen nun wieder das zuvor gestartete Programm top.

tmux

  • steht für Terminalmultiplexer. Das Programm bietet ähnliche Funktionen wie screen, verwendet aber auf die ncurses-Bibliothek.
  • tmux basiert außerdem auf einer Client-Server-Architektur und bietet viele zusätzliche Funktionen, die über Tastenkombinationen aufgerufen werden.
  • Sie erhalten einen Überblick, wenn Sie innerhalb einer tmux -Sitzung (Strg)+(B) gefolgt von einem (?) eingeben.