|
|
Zeile 1: |
Zeile 1: |
| == Wie wird ein Prozess generiert ==
| | '''Erstellung''' eines neuen Wiki-Artikels |
| und wie sieht sein weiterer Weg aus?
| |
|
| |
|
| Die beiden wesentlichen Aktionen bei der Prozessentstehung sind die Systemaufrufe '''fork'''() und '''exec'''(). Mittels '''fork'''() wird ein neuer Prozess erzeugt, der zunächst dasselbe Programm wie sein Elternprozess ausführt.
| |
| Erst mit dem Aufruf von '''exec'''() wird ein Prozess das alte Programm durch ein neues ersetzen und dessen Ausführung beginnen.
| |
| Der '''exec'''() Aufruf hat seinen Weg auch in den Funktionsumfang der in die Shell eingebauten Kommandos gefunden:
| |
|
| |
|
| exec ls
| | = Beschreibung = |
| login:
| | # Passenden Artikelname wählen |
| | # Suche nach dem gewünschten Artikelnamen |
| | # Prüfen, welche relevanten Artikel bereits existieren |
| | #* Gegebenenfalls diesen bearbeiten |
| | # Neuen Artikel anlegen |
| | # Vorlage kopieren, anpassen und füllen |
|
| |
|
| 1.2.1.1 Erklärung
| | = Artikel kategorisieren = |
| | Die Vorlage enthält am Ende die Kategorie <nowiki>[[Kategorie:MediaWiki]]</nowiki> |
| | <nowiki>[[Kategorie:Kategoriename]]</nowiki> |
| | ; Passende Kategorie(n) finden |
|
| |
|
| Im Beispiel wurde das Programm des laufenden Prozesses durch das Kommando '''ls''' ersetzt.
| | = Formatierung = |
| Da der aktive Prozess die Shell selbst ist, wird diese beendet und nachdem nun auch '''ls''' seine Tätigkeit abgeschlossen hat, finden wir uns auf der Login-Konsole wieder (sofern es sich um die Login-Shell selbst handelte).
| | siehe '''[[Wiki:Artikel:Formatierung]]''' |
| '''fork'''() existiert nicht als eigenständiges Kommando. Eine Shell wird diesen Systemruf immer tätigen, um ein Programm innerhalb eines neuen Prozesses auszuführen. | |
|
| |
|
| Eine Shell vermag (fast) beliebig viele Prozesse zu starten, jedoch wartet sie in den häufigsten Fällen auf die Terminierung des zuletzt gestarteten Prozesses:
| | = Links = |
| | siehe '''[[Wiki:Links]]''' |
|
| |
|
| '''sleep''' 100 | | = Tabellen = |
| # 100 Sekunden verstreichen, die Shell wartet...
| | siehe '''[[Wiki:Tabellen]]''' |
|
| |
|
| Uns als Anwender steht es nun zu, einem Prozess zu signalisieren, dass er sich z.B. regulär beenden [Ctrl]-[D] , ist i.A. programmabhängig) oder seine Verarbeitung abbrechen ([Ctrl]-[C]) soll:
| | = Bilder = |
| | siehe '''[[Wiki:Bilder]]''' |
|
| |
|
| '''cat''' | | = Seitennamen ändern = |
| Die Eingabe muss mittels [Ctrl]-[D] beendet[Enter]
| | # Der Befehl ''Verschieben'' unter dem Reiter ''Mehr'' kann einen Seitennamen verändern. |
| Die Eingabe muss mittels [Ctrl]-[D] beendet
| | # Klickt man auf ''Verschieben'' kommt ein Menü. Unter ''Neuer Titel:'' neben ''(Seite)'' den neuen Seitennamen eingeben und auf ''Seite verschieben'' klicken. |
| oder mit [Ctrl]-[C] abgebrochen werden[Enter]
| | # Beachtet dabei, dass nur eine neue Seite mit dem Inhalt der alten Seite erstellt wurde. Die alte Seite ist noch da. |
| oder mit [Ctrl]-[C] abgebrochen werden
| | # Sofern ihr nicht auf einer Kategorieseite euren Seitennamen geändert habt, bleibt der alte Seitenname erhalten, allerdings werdet ihr weitergeleitet zur neuen Seite. |
| [Ctrl]-[C]
| |
|
| |
|
| Anmerkung 'Das reguläre Beenden eines Prozesses kann auf verschiedenen Wegen erfolgen. '
| | = Qualitätskriterien = |
| | | [[Wiki:QM-Checkliste]] |
| In obigem Beispiel ist das Programm '''cat''' eigentlich dazu gedacht, aus einer Datei zu lesen, und beendet sich, sobald das Dateiende erreicht ist.
| |
| Wird jedoch von der Standardeingabe eingelesen, und ist diese wie in diesem Fall mit der Tastatur verbunden, so muss der Nutzer dem Programm signalisieren, dass das »Dateiende« erreicht wurde.
| |
| Dies erfolgt mit dem End-of-File-Zeichen (kurz '''EOF'''), das auf der Tastatur mit der Tastenkombination [Ctrl]-[D] generiert wird.
| |
| In solchen Fällen bestünde keine Möglichkeit, beliebig viele Prozesse quasi-parallel zu starten, da der soeben initiierte Prozess die Shell für weitere Eingaben blockiert.
| |
| Die Lösung des Problems liegt im Verschieben des Prozesses in den Hintergrund.
| |
| Dabei wird er von der Ein- und Ausgabe der Shell abgekoppelt und läuft im Hintergrund weiter, bis er sich selbst beendet, oder aber auf Grund einer notwendigen Interaktion mit dem Benutzer zum Anhalten gezwungen ist.
| |
| | |
| # Start eines Hintergrundprozesses, der keine Eingaben erwartet
| |
| ls -lR > /dev/null &
| |
| [1] 706
| |
| "beliebiges Arbeiten auf der Kommandozeile" [Enter]
| |
| [1]+ Done ls $LS_OPTIONS -lR >/dev/null
| |
| | |
| # Start eines Hintergrundprozesses, der Eingaben erwartet
| |
| (ls -Rl >/dev/null; cat)&
| |
| [1] 720
| |
| [Enter]
| |
| | |
| [1]+ Stopped (ls $LS_OPTIONS -Rl >/dev/null; cat)
| |
| fg
| |
| (ls $LS_OPTIONS -Rl >/dev/null; cat)
| |
| hallo[Enter]
| |
| hallo
| |
| [Ctrl]-[D]
| |
| | |
| Jedes im Hintergrund laufende Programm wird als Job bezeichnet.
| |
| Nach Beendigung der Eingabe des Kommandos mit [Enter] gibt die Bash auf der Standardfehlerausgabe eine Zeile mit Jobinformationen aus, wie am Beispiel zu erkennen ist.
| |
| Diese beinhaltet in eckigen Klammern eine fortlaufende, von der Shell vergebene Jobnummer und die vom System dem Prozess zugeordnete Prozessnummer (PID).
| |
| Mit dem Kommando jobs kann man Informationen über die derzeit auf einer Shell laufenden Hintergrundprozesse erlangen:
| |
| | |
| cat &
| |
| [1] 1343
| |
|
| |
| [1]+ Stopped cat
| |
|
| |
| time dd count=1000000 if=/dev/zero of=/dev/null &
| |
| [2] 1346
| |
| jobs
| |
| [1]+ Stopped cat
| |
| [2]- Running time dd count=1000000 if=/dev/zero of=/dev/null &
| |
| 1000000+0 Records ein
| |
| 1000000+0 Records aus
| |
|
| |
| real 0m13.817s
| |
| user 0m9.430s
| |
| sys 0m4.040s
| |
| [2]- Done time dd count=1000000 if=/dev/zero of=/dev/null
| |
| exit
| |
| exit
| |
| There are stopped jobs.
| |
| jobs
| |
| [1]+ Stopped cat
| |
| exit
| |
| # Shell wurde beendet
| |
| | |
| [[Categorie: Linux: Prozessverwaltung]]
| |
Erstellung eines neuen Wiki-Artikels
Beschreibung
- Passenden Artikelname wählen
- Suche nach dem gewünschten Artikelnamen
- Prüfen, welche relevanten Artikel bereits existieren
- Gegebenenfalls diesen bearbeiten
- Neuen Artikel anlegen
- Vorlage kopieren, anpassen und füllen
Artikel kategorisieren
Die Vorlage enthält am Ende die Kategorie [[Kategorie:MediaWiki]]
[[Kategorie:Kategoriename]]
- Passende Kategorie(n) finden
Formatierung
siehe Wiki:Artikel:Formatierung
Links
siehe Wiki:Links
Tabellen
siehe Wiki:Tabellen
Bilder
siehe Wiki:Bilder
Seitennamen ändern
- Der Befehl Verschieben unter dem Reiter Mehr kann einen Seitennamen verändern.
- Klickt man auf Verschieben kommt ein Menü. Unter Neuer Titel: neben (Seite) den neuen Seitennamen eingeben und auf Seite verschieben klicken.
- Beachtet dabei, dass nur eine neue Seite mit dem Inhalt der alten Seite erstellt wurde. Die alte Seite ist noch da.
- Sofern ihr nicht auf einer Kategorieseite euren Seitennamen geändert habt, bleibt der alte Seitenname erhalten, allerdings werdet ihr weitergeleitet zur neuen Seite.
Qualitätskriterien
Wiki:QM-Checkliste