Prozess: Unterschied zwischen den Versionen
Michi (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Michi (Diskussion | Beiträge) |
||
(7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
Der <b>Prozess</b> unterscheidet sich vom [[Programm]] dadurch, dass er als Ausführung des Programms betrachtet werden kann; es können mehrere Prozesse desselben Programmes aktiv sein. Jeder Prozess läuft in einem eigenen Adressbereich, der vor anderen Adressbereichen geschützt ist. Ausnahmen bilden Sockets oder die Interprozesskommunikation (IPC). | Der <b>Prozess</b> unterscheidet sich vom [[Programm]] dadurch, dass er als Ausführung des Programms betrachtet werden kann; es können mehrere Prozesse desselben Programmes aktiv sein. Jeder Prozess läuft in einem eigenen Adressbereich, der vor anderen Adressbereichen geschützt ist. Ausnahmen bilden Sockets oder die Interprozesskommunikation (IPC). | ||
Jeder Prozess besitzt eine eindeutige | Jeder Prozess besitzt eine eindeutige <b>Prozessnummer</b> (auch: Prozess-ID / PID), welche über die Befehle [[pstree]], [[pidof]] und [[pgrep]] angezeigt werden kann. Beim Booten des Systems wird mit der Prozessnummer 0 begonnen. Prozessnummer werden laufend vom System vergeben und sind einmalig. Sie werden gewrappt - bei etwa 32000 ist Schluss und das System beginnt mit der Vergabe von vorn. | ||
Das Prozesssystem ist bei Unix hierarchisch. Mit Ausnahme von | Das Prozesssystem ist bei Unix hierarchisch. Mit Ausnahme von Prozessnummer 0 hat jeder Prozess eine <b>Eltern-Prozessnummer</b> (engl. Parent Process ID / PPID) - die PPID ist also die Prozessnummer des Erzeuger-Prozesses. Beispielsweise wird beim Einloggen eine Login-Shell gestartet - alle später in dieser Shell gestarteten Prozesse aus dieser Sitzung sind Kinder dieser Shell. Ein solcher Prozess wird als "process group leader" bezeichnet - stirbt ein solcher Prozess, so sterben im Allgemeinen auch seine Kinder. | ||
Viele Informationen zu laufenden Prozessen finden sich im Verzeichnis "/proc". | Viele Informationen zu laufenden Prozessen finden sich im Verzeichnis "/proc". | ||
Zeile 26: | Zeile 26: | ||
|} | |} | ||
Der [[Kernel]] verfügt über einen [[Prozess-Scheduler]] und eine Speicherverwaltung, um gestarteten Prozessen Rechenzeit und Speicher zuzuteilen. Ein wählbarer [[IO-Scheduler]] bringt Zugriffe auf Datenspeicher in eine geeignete Reihenfolge. Das Ressourcenmanagment regelt den Zugriff auf Hardwarekomponenten. | Der [[Linux-Kernel]] verfügt über einen [[Prozess-Scheduler]] und eine Speicherverwaltung, um gestarteten Prozessen Rechenzeit und Speicher zuzuteilen. Ein wählbarer [[IO-Scheduler]] bringt Zugriffe auf Datenspeicher in eine geeignete Reihenfolge. Das Ressourcenmanagment regelt den Zugriff auf Hardwarekomponenten. | ||
Der Linux-Kernel startet eigene Prozesse. Dazu verwendet er die Funktion "kthread", die alle weiteren Aktionen anschiebt. Viele [[KDE]]-Anwendungen hängen von "kdeinit" ab, einem Mechanismus, der die Startzeiten von KDE-Anwendungen verkürzt. | Der Linux-Kernel startet eigene Prozesse. Dazu verwendet er die Funktion "kthread", die alle weiteren Aktionen anschiebt. Viele [[KDE]]-Anwendungen hängen von "kdeinit" ab, einem Mechanismus, der die Startzeiten von KDE-Anwendungen verkürzt. | ||
== Anzeige der Prozess-ID / PID == | |||
Mit [[pgrep]] Suche nach der PID der Prozesse, welche die Zeichenfolge "java" enthalten. | |||
$ <b>pgrep -f java</b> | |||
Mit [[ps]] Suche nach der PID der Prozesse, welche die Zeichenfolge "java" enthalten. | |||
$ <b>ps -C java -o pid=</b> | |||
Mit [[ps]] (und weiteren Befehlen) Suche nach der PID der Prozesse, welche die Zeichenfolge "java" enthalten. Bemerkungen: | |||
* <tt>ps -ef</tt> zeigt die Standardausgabe für alle Prozesse | |||
* <tt>grep java</tt> findet alle Zeilen, welche die Zeichenfolge "java" enthalten | |||
* <tt>grep -v grep</tt> unterdrückt die Zeile, welche die Zeichenfolge "grep" selber enthält | |||
* <tt>awk '{ print $2 }</tt>9 zeigt nur die zweite Spalte (die PID) aus der Standardausgabe von "ps -ef" für alle verbleibenden Zeilen | |||
$ <b>ps -ef | grep java | grep -v grep | awk '{ print $2 }'</b> | |||
Mit [[ps]] ist auch folgendes möglich. | |||
$ <b>ps -ef | grep [j]ava | awk '{ print $2 }'</b> | |||
Eine Suche nach einer Zeichenfolge wie "java" ist etwas unsicher, da these Zeichenfolge auch in anderen Programmnamen oder Pfaden vorkommen kann, ausserdem kann sie auch in mehreren Zeilen vorkommen. Je genauer der mit "grep" gesuchte Ausdruck, desto besser. | |||
== Jobverwaltung == | == Jobverwaltung == | ||
Zeile 88: | Zeile 112: | ||
|} | |} | ||
Ein Signal wird an einen Prozess geschickt, deshalb muss erst die | Ein Signal wird an einen Prozess geschickt, deshalb muss erst die Prozessnummer herausgefunden werden. Mit "[[kill]] -<Signal> <PID>" wird einem Prozess ein Signal gesendet. | ||
[[killall]] und [[pkill]] können allen Prozessen mit einem bestimmten Namen oder allen Prozessen eines bestimmten Benutzers ein Signal senden. | [[killall]] und [[pkill]] können allen Prozessen mit einem bestimmten Namen oder allen Prozessen eines bestimmten Benutzers ein Signal senden. | ||
Zeile 96: | Zeile 120: | ||
== Weblinks == | == Weblinks == | ||
{{ | {{Weblinks}} | ||
{{ | {{url_dewikipedia|Prozess_(Informatik)|Prozess (Informatik)}} | ||
{{url_enwikipedia|Process_(computing)|Process (computing}} | |||
{{Fuss}} | |||
Aktuelle Version vom 15. Mai 2018, 19:51 Uhr
Der Prozess unterscheidet sich vom Programm dadurch, dass er als Ausführung des Programms betrachtet werden kann; es können mehrere Prozesse desselben Programmes aktiv sein. Jeder Prozess läuft in einem eigenen Adressbereich, der vor anderen Adressbereichen geschützt ist. Ausnahmen bilden Sockets oder die Interprozesskommunikation (IPC).
Jeder Prozess besitzt eine eindeutige Prozessnummer (auch: Prozess-ID / PID), welche über die Befehle pstree, pidof und pgrep angezeigt werden kann. Beim Booten des Systems wird mit der Prozessnummer 0 begonnen. Prozessnummer werden laufend vom System vergeben und sind einmalig. Sie werden gewrappt - bei etwa 32000 ist Schluss und das System beginnt mit der Vergabe von vorn.
Das Prozesssystem ist bei Unix hierarchisch. Mit Ausnahme von Prozessnummer 0 hat jeder Prozess eine Eltern-Prozessnummer (engl. Parent Process ID / PPID) - die PPID ist also die Prozessnummer des Erzeuger-Prozesses. Beispielsweise wird beim Einloggen eine Login-Shell gestartet - alle später in dieser Shell gestarteten Prozesse aus dieser Sitzung sind Kinder dieser Shell. Ein solcher Prozess wird als "process group leader" bezeichnet - stirbt ein solcher Prozess, so sterben im Allgemeinen auch seine Kinder.
Viele Informationen zu laufenden Prozessen finden sich im Verzeichnis "/proc".
Prozessstatus
Ein Prozess befindet sich unter Linux immer in einem der folgenden Zustände, die mit dem Befehl "ps -el" in der Spalte "S" angezeigt werden.
Kürzel | Status | Beschreibung |
---|---|---|
D | uninterruptible sleep | Kann meist nicht mit einfachem kill beendet werden, sondern nur durch Neustart |
R | running or runnable | Der Prozess wird gerade auf dem Prozessor ausgeführt bzw. befindet sich in der Ausführungswarteschlange. |
S | interruptible sleep | Normalzustand - der Prozess ist zur Ausführung bereit. |
T | traced or stopped | Angehalten - entweder durch ein Jobkontrollsignal oder weil der Prozess getracet wird. |
Z | zombie | Zombie-Prozess, der dabei ist, sich zu beenden. |
X | dead | Toter Prozess - ein solcher sollte niemals sichtbar sein. |
Der Linux-Kernel verfügt über einen Prozess-Scheduler und eine Speicherverwaltung, um gestarteten Prozessen Rechenzeit und Speicher zuzuteilen. Ein wählbarer IO-Scheduler bringt Zugriffe auf Datenspeicher in eine geeignete Reihenfolge. Das Ressourcenmanagment regelt den Zugriff auf Hardwarekomponenten.
Der Linux-Kernel startet eigene Prozesse. Dazu verwendet er die Funktion "kthread", die alle weiteren Aktionen anschiebt. Viele KDE-Anwendungen hängen von "kdeinit" ab, einem Mechanismus, der die Startzeiten von KDE-Anwendungen verkürzt.
Anzeige der Prozess-ID / PID
Mit pgrep Suche nach der PID der Prozesse, welche die Zeichenfolge "java" enthalten.
$ pgrep -f java
Mit ps Suche nach der PID der Prozesse, welche die Zeichenfolge "java" enthalten.
$ ps -C java -o pid=
Mit ps (und weiteren Befehlen) Suche nach der PID der Prozesse, welche die Zeichenfolge "java" enthalten. Bemerkungen:
- ps -ef zeigt die Standardausgabe für alle Prozesse
- grep java findet alle Zeilen, welche die Zeichenfolge "java" enthalten
- grep -v grep unterdrückt die Zeile, welche die Zeichenfolge "grep" selber enthält
- awk '{ print $2 }9 zeigt nur die zweite Spalte (die PID) aus der Standardausgabe von "ps -ef" für alle verbleibenden Zeilen
$ ps -ef | grep java | grep -v grep | awk '{ print $2 }'
Mit ps ist auch folgendes möglich.
$ ps -ef | grep [j]ava | awk '{ print $2 }'
Eine Suche nach einer Zeichenfolge wie "java" ist etwas unsicher, da these Zeichenfolge auch in anderen Programmnamen oder Pfaden vorkommen kann, ausserdem kann sie auch in mehreren Zeilen vorkommen. Je genauer der mit "grep" gesuchte Ausdruck, desto besser.
Jobverwaltung
- jobs zeigt eine Liste der gestarteten Jobs. Der gerade aktuelle Job wird dabei mit einem Pluszeichen markiert.
- bg legt den aktuellen Job ohne weitere Argumente in den Hintergrund, wo er weiterläuft.
- fg bringt den Job wieder in den Vordergrund.
Beispiel
Starten des Befehls "du -s /" im Hintergrund (&).
$ du -s / & [1] 28428
Ansehen des Prozesses 28428 in der Prozesstabelle.
$ ps -lp 28428 F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 R 1000 28428 27433 7 80 0 - 843 - pts/2 00:00:06 du
Hintergrund-Job "[1]" wird in den Vordergrund geholt.
$ fg %1 du -s /
Beobachtung von Prozessen
- pstree gibt einen Überblick darüber, welcher Prozess welche anderen Prozesse startet.
- ps zeigt eine Liste aller Prozesse.
- top zeigt eine Liste der Prozesse und aktualisiert diese regelmässig.
- strace zeigt, welche Systemfunktionen ein Prozess aufruft.
Unter KDE erreicht man mit "CTRL+Esc" stets die Prozessliste des KDE-Systemwerkzeugs KSysguard. Das GTK-Pendant Gnome-Systemmonitor schlüsselt zusätzlich über das Kontextmenü "Speicherfelder" den von einem Prozess belegten Speicher genauer auf. Dieselben Informationen liefert auch der Befehl pmap.
Signale
Signale bilden einen einfachen Mechanismus zur Prozesskommunikation. Signale sind asynchrone Ereignisse, die von einem Benutzer an der Dialogstation oder von einem Programmfehler erzeugt werden können. Prozesse können unterschiedlich auf Signale reagieren. "kill -l" zeigt eine Liste der möglichen Signale.
Gängige Signale sind:
Name | Wert | Funktion |
---|---|---|
HUP | 1 | Hang-up. Dient oft dazu, Serverdienste anzuweisen, ihre Konfiguration neu einzulesen. |
INT | 2 | Interrupt. Anhalten des Programms. Identisch zu "CTRL+C". |
KILL | 9 | Kill. Prozess zwangsweise beenden. |
SIGV | 11 | Segmentation Fault. Prozess wegen Speicherschutzverletzung zwangsweise beenden. |
TERM | 15 | Terminate. Prozess bitten, sich zu beenden. |
CONT | 18 | Continue. Prozessausführung fortsetzen. |
STOP | 19 | Stop. Prozessausführung anhalten. |
TSTP | 20 | Terminal. Stop. Identisch wie den Prozess mit "CTRL+Z" anzuhalten. |
Ein Signal wird an einen Prozess geschickt, deshalb muss erst die Prozessnummer herausgefunden werden. Mit "kill -<Signal> <PID>" wird einem Prozess ein Signal gesendet.
killall und pkill können allen Prozessen mit einem bestimmten Namen oder allen Prozessen eines bestimmten Benutzers ein Signal senden.
KDE kennt für das Signal "KILL" die Tastenkombination "CTRL+ALT+Esc", welche den Mauszeiger in einen Totenkopf verwandelt. Dem Prozess mit dem Fenster, auf das mit der linken Maustaste geklickt wird, schickt KDE das Signal "KILL". Mit der rechten Maustaste kann der Vorgang abgebrochen werden. Die Konfiguration dazu findet sich unter "Regionaleinstellungen & Zugangshilfen > Tastenkürzel > Tastenkombinatione > Allgemeine Tastenkürzel > Verschiedenes > Fenster beseitigen".
Weblinks
Herausgeber | Sprache | Webseitentitel | Anmerkungen |
---|---|---|---|
Wikipedia | ger | Prozess (Informatik)wbm | Enzyklopädischer Artikel |
Wikipedia | eng | Process (computingwbm | Enzyklopädischer Artikel |