Steuerung und Überwachung von Prozessen. Jedes Programm auf einem Computer besteht mindestens aus einem Prozess. Prozesse sind in einer Baumhierachie aufgebaut mit der Wurzel im init (systemd) - Prozess. Dabei hat jeder Prozess eine eindeutige ID, die Prozess-ID (PID). Die PID 0 ist nicht existent!!!
Überwachen von Prozessen und Systemgrößen
- ps - Anzeige der aktuell laufenden Prozesse als Momentaufnahme
Dieses Programm zeigt alle aktive Prozesse eines Benutzers oder aller Benutzer an, die in diesem Moment aktiv sind. Kurzlebige Programme werden meist nicht angegeben. Ausführung des Befehls ohne Option zeigt nur die Prozesse an, die mit dem aufrufenden Terminal verbunden sind. Die Optionen können mit einem vorangestellten Strich aufgerufen werden (Unix-Syntax) oder ohne (BSD-Syntax). Die dritte Variante stellt die ausgeschriebenen Optionen dar, was der GNU-Syntax entspricht. Je nach System können die unterschiedlichen Syntaxe zu unterschiedlichen Ergebnissen führen (was ich bisher leider noch nicht nachvollziehen konnte)
-a :zeigt die Prozesse aller angemeldeten Benutzer des Systems an, die mit einem Terminal verknüpft sind
-u :Angabe der Startzeit, des Pfads zur ausführbaren Datei und den ausführenden Benutzer
-x :listet auch Prozesse auf, die nicht mit einem Terminal verbunden sind (z.B. init oder cron)
-C <prozess> :Ausgabe aller Instanzen eines auf der Kommandozeile angegebenen Prozess
-U <benutzer> :zeigt die Prozesse eines bestimmten Benutzers an
-A :zeigt alle Prozesse an, auch die, die nicht mit dem Terminal benutzt werden mit weniger Informationen als die oft verwendete Option -aux - pstree - Darstellung aller auf dem Computer laufenden Prozesse als Baumhierachie
-a :zeigt zusätzliche Optionen und Argumente an, die dem Prozess an der Kommandozeile übergeben wurde
-G :Ausgabe im VT100-Modus. Optisch andere Ausgabe (Ubuntu und CentOS kein Unterschied zu erkennen)
-p :zeigt zusätzlich die PIDs an
-n :Sortierung erfolgt nach PIDs, nicht in alphabetischer Reihenfolge - top - Überwachung der auf dem Computer laufenden Prozesse in EchtzeitAusgabe während der Ausführung erfolgt dynamisch. Über der Auflistung der Prozessen wird in der "Headline" verschiedene Informationen des Systems ausgegeben
- allg. Informationen wie Uhrzeit, Uptime, Anzahl der angemeldeten Benutzer, durchschnittliche Systemauslastung
- Tasks: Anzahl der Prozesse insgesamt, laufende Prozesse, schlafende Prozesse, gestoppte Prozesse und Zombie-Prozesse
- CPUs: Benutzung durch Benutzerprozesse, Systemprozesse, den Idle-Prozess (Leerlaufprozess), etc.
- Mem: Speicher insgesamt, in Verwendung, freier Speicher und für Buffers verwendet
- Swap: diverse Werte
Interaktivoptionen: - k (kill) tötet einen Prozess. Angabe der PID und des Signals notwendig
- n (number of) gibt an, wie viele Zeilen ausgegeben werden sollen
- r (renice) ändert den Nice-Wert eines Prozesses während der Laufzeit
- h (help) gibt eine Hilfe aus
- q (quit)
- s (seconds) ändert den Aktualisierungsintervall
- -i Anzeige nur der laufenden Prozesse
- -b (batch) in Kombination mit einem Redirect kann die Ausgabe in eine Textdatei umgeleitet werden
- -d (delay) Aktualisierungsintervall in Sekunden festlegen. Standartwert liegt bei einer Sekunde
- -q startet top im Echtzeitmodus (wird nicht von allen Versionen unterstützt)
Signale an Prozesse senden
- kill -l
- SIGHUP = Hangup Signal (konfigurationsdateien neu einlesen), verlassen der Shell (Verbindungsabbruch, Ausloggen)
- SIGINT = Programmabruch (Strg + C)
- SIGQUIT = Unterbrechen der Terminalverbindung und debuggen
- SIGILL = Ubgültige Anweisung
- SIGTRAP = Unterbrechung (Einzelschrittausführung)
- SIGABRT = Abbruchsignal durch das Programm abort, Abnormale Beendigung
- SIGBUS = Busfehler
- SIGFPE = Fehler bei Gleitkommezahlen-Operationen
- SIGKILL =Kill-Signal, beendet einen Prozess mit Gewalt (ohne Aufräumen)
- SIGUSR1 = Frei zur Benutzung, sofern es in den Programmen integriert ist (z.B. dd)
- SIGSEGV = Ungültige Speicher-Referenz
- SIGUSR2 = Frei zur Benutzung, sofern es in den Programmen integriert ist
- SIGPIPE = Fehlerhafte pipe: Auf eine pipe schreiben, ohne das ein "Leser" da ist
- SIGALRM = Timer Signal von dem Programm alarm
- SIGTERM = Beenden eines Prozesses mit Aufräumen
- SIGSTKFLT = ungenutzt (Stack-Fehler im Coprozessor)
- SIGCHLD = Kind-Prozess wurde angehalten, oder gestoppt
- SIGCONT = angehaltenen Prozess fortsetzten
- SIGSTOP = Prozess anhalten
- SIGTSTP = Prozess anhalten, wobei der Prozess speicherresistent bleibt (Strg + Z)
- SIGTTIN = Terminal Eingabe für Hintergrundprozess
- SIGTTOU = Terminal Ausgabe für Hintergrundprozess
- SIGURG = Wichtige Bedingung am Socket
- SIGXCPU = CPU Zeitlimit erreicht
- SIGXFSZ = Datei-Größen-Limit erreicht
- SIGVTALRM = Virtuelle Alarm Uhr
- SIGPROF = eingestellerter Timer wurde erreicht
- SIGWINCH = Fenster anpassen Signal
- SIGIO = I/O sind jetzt verfügbar
- SIGPWR = Power Fehler
- SIGSYS = ungültiges Argument zur Ausführung
- SIGRTMIN
- - 49.SIGRTMIN+1 - SIGRTMIN+15
- - 63.SIGRTMAX-14 SIGRTMAX-1
- SIGRTMAX
- kill - Senden eines Signals an einen Prozess
Als Argument wird die (oder mehrere) PIDs des zu beeinflussenden Prozesses erwartet und natürlich das Signal, welches gesendet werden soll. Wird kein definiertes Signal gesendet verwendet kill SIGTERM, um den angegebenen Prozess zu beenden. Die Signale können dabei als Wort oder ihre entsprechende Nummer übergeben werden. Die Manpage von kill ist sehr übersichtlich. Es gibt 10 verschiedene Möglichkeiten, das Signal an den Prozess zu senden, die jedoch alle den gleichen Effekt haben. Es stehen folgende Optionen zur Verfügung:
-s --signal :spezifiziert das Signal, welches gesendet werden soll
-l --list :gibt die Liste der verfügbaren Signale aus
-L --table :gibt die Liste der verfügbaren Signale als Tabelle aus. Unter Ubuntu muss diese Option mit /bin/kill -L ausgeführt werden. Die Ausgabe enthält die Kurzformen der Signale (z.B. SIGKILL = KILL; SIGTERM = TERM) und die Signale ab SIGRTMIN werden nicht mehr ausgegeben.
Darstellung der 10 (bzw. 11 bei SIGTERM) Möglichkeiten, wie das Signal gesendet werden kann:
:~# kill 3167
:~# kill -s 15 3167
:~# kill -s SIGTERM 3167
:~# kill -s TERM 3167
:~# kill -s sigterm 3167
:~# kill -s term 3167
:~# kill -15 3167
:~# kill -SIGTERM 3167
:~# kill -TERM 3167
:~# kill -sigterm 3167
:~# kill -term 3167 - killall - Senden eines Signals an einen Prozess mit Prozessnamen
Bei killall wird nicht die PID benötigt, sondern der Prozessname. Damit können dann auch mehrere Prozesse mit gleichen Namen beendet werden. Verwendung ansonsten wie kill - pgrep - Ermittlung der PIDs aller laufender Prozesse
Der vollständige Name muss hierfür nicht bekannt sein. Aufruf ohne Option nicht möglich. Es ist ebenfalls möglich, PIDs von einzelnen Benutzern auszugeben, oder auch wie viele Prozesse ein Benutzer gerade am Laufen hat. - pkill - Sendet ein Signal an die gefilterterten Prozesse
Verwendung wie pgrep, nur dass hier ein Signal an den/ die Prozesse übermittelt wird. Z.B können alle Prozesse eines Benutzers beendet werden, was jedoch auch die Login-Shell betrifft, wodurch der Benutzer dann vom System abgemeldet wird.
Jobs im Vorder- und Hintergrund laufen lassen
- In einer Shell können praktisch beliebig viele Prozesse (Jobs) parallel laufen, aber nur einer im Vordergrund.
- Programme, die im Hintergrund laufen, können den Status running oder stopped haben.
- running: Läuft im Hintergrund weiter und verrichtet seine Aufgabe
- stopped: Der Prozess ist angehalten und wartet auf seine Reaktivierung oder Beendigung
- Strg + z: Programm wird in den Hintergrund transferiert und angehalten (Signal 20 SIGTSTP)
- Möchte man einen Prozess direkt im Hintergrund starten hängt man beim Aufruf ein & (Et-Zeichen) hinten an. Dabei wird das Programm nur in den Hintergrund transferiert, aber nicht mit dem Signal SIGTSTP gestoppt.
- jobs :Anzeige der gerade aktuell laufenden Jobs (Prozesse). Je nach Programm muss man mit dem Aufruf schnell sein, da der Job ansonsten abgeschlossen ist.
- Nach getaner Arbeit bekommt der Job den Status done. Dieser wird beim Aufruf jobs einmalig angezeigt.
- Auflistung bei mehreren Prozessen mit Jobnummern in eckigen Klammern
- Der Job, der mit dem '+' Zeichen versehen ist, wird durch die Programme bg und fg angesprochen, wenn auf der Kommandozeile kein anderes Programm angegeben wird
- -l :Die PIDs der Prozesse werden ebenfalls mit ausgegeben
- -p :Nur die PIDs werden ausgegeben, sonst keine anderen Informationen (z.B. welches Programm)
- bg und fg - gestoppte Prozesse erneut starten
- bg :gestoppte Prozesse im Hintergrund fortführen. Aufruf mit Hilfe der Jobnummer, die mit Hilfe von jobs ermittelt werden kann
- fg :gestoppten Prozess aus dem Hintergrund wieder in den Vordergrund zur Ausführung bringen. Auch hier wird für den Aufruf die Jobnummer verwendet
- Es wird jeweils das Signal 18 SIGCONT an den Prozess gesendet
- werden die Programme ohne Angabe der Jobnummer aufgerufen, wird der Prozess mit dem '+' gestartet
Prozesse unabhängig von einem Terminal laufen lassen
- nohup :einen Job unabhängig von einer Shell verwenden
- z.B. sinnvoll, wenn man den Job starten will und dann nach Hause geht (logout)
- macht den Prozess immun gegen das SIGHUB, SIGINT, SIGQUIT und SIGTERM Signal
- umleiten der stdout in die Datei nohup.out, welche im Heimatverzeichnis des Benutzers abgelegt wird
- screen :Aufrechterhaltung von Sitzungen über Netzwerke, wenn die Verbindung zusammen bricht. Das Programm byobu funktioniert ähnlich, ist aber nicht Prüfungsrelevant
- uptime :Ausgabe der aktuellen Zeit, Laufzeit des Systems, Anzahl der Benutzer und die durchschnittliche Anzahl von lauffähigen Jobs in der letzten Minute, den letzten 5 und 15 Minuten aus.
- w :Anzeige aller angemeldeten Benutzer am System und welche Prozesse die einzelnen Benutzer gerade in der Verwendung haben. Hier wird ebenfalls die Informationen von uptime ausgegeben
- free :Anzeige des Arbeitsspeicher und seiner momentanen Verwendung (Speicherauslastung)
- -b :Bytes
- -k :KB
- -m :MB
- -g :GB
- -l :Ausgabe aus High- und Low-Memory
- -o :altes Format verwenden
- -t :Summe für RAM und Swap anzeigen
- -s :automatische Aktualisierung in Sekunden (funktioniert unter Ubuntu 16.04 nicht)
- -c :Anzahl der automatischen Aktualisierungen definieren, kann in Verbindung mit -s aufgerufen werden, aber nicht unter Ubuntu 16.04
- -V :Version
Keine Kommentare:
Kommentar veröffentlichen