Browse Source

reformat README

Michael Mächtel 8 years ago
parent
commit
bcf2e9d3eb
1 changed files with 146 additions and 68 deletions
  1. 146
    68
      hw4/task1/README.md

+ 146
- 68
hw4/task1/README.md View File

@@ -1,94 +1,143 @@
1 1
 # Homework hw4 task1
2 2
 
3
-Ziel dieser Aufgabe ist es, mittels des externen Crates `procinfo` einige Prozessverwaltungs-Informationen kennen zu lernen, die das Betriebssystem beim Ausführen der Prozesse verwaltet. Fertige Programme wie **ps**, **htop** oder **pmap** verwenden diese Informationen, um über das System und Tasks Auskunft zu geben.
4
-
5
-Die Funktionalität der Programms wird auf die 3 Module aufgeteilt:
6
-
7
-- `main.rs`: die Funktion `main()
8
-- `readproc.rs`: Handling der Funktionen, die angefragte Informationen aus dem `proc/` Verzeichnis zu Verfügung stellen.
9
-- `pstree.rs`: Struct und Methoden, um einen 'pstree' darzustellen
10
-
11
-## Gliederung
12
-
13
-<!-- MarkdownTOC -->
14
-
3
+- [Überblick](#%C3%BCberblick)
15 4
 - [Daten aus dem /proc Verzeichnis lesen](#daten-aus-dem-proc-verzeichnis-lesen)
16 5
 - [Externe Crate nutzen](#externe-crate-nutzen)
17 6
 - [Optionalen Parameter parsen](#optionalen-parameter-parsen)
18 7
 - [Aufgaben](#aufgaben)
19
-  - [Externe Crate in Dependencies eintragen](#externe-crate-in-dependencies-eintragen)
20
-  - [`readproc.rs`: Eigene Prozessinformationen auslesen](#readprocrs-eigene-prozessinformationen-auslesen)
21
-  - [`pstree.rs`: Prozesskette ausgeben](#pstreers-prozesskette-ausgeben)
8
+    - [Externe Crate in Dependencies eintragen](#externe-crate-in-dependencies-eintragen)
9
+    - [`readproc.rs`: Eigene Prozessinformationen auslesen](#readprocrs-eigene-prozessinformationen-auslesen)
10
+    - [`pstree.rs`: Prozesskette ausgeben](#pstreers-prozesskette-ausgeben)
22 11
 - [Kontrolle Ihres Repositories](#kontrolle-ihres-repositories)
23 12
 
24
-<!-- /MarkdownTOC -->
25
-
26
-
27
-## Daten aus dem /proc Verzeichnis lesen
13
+## Überblick
28 14
 
29
-"Das `/proc`-Verzeichnis ist kein wirkliches Dateisystem, sondern
30
-eine Schnittstelle zum Kernel. Die Dateien, die in diesem Verzeichnis liegen, benutzen keinen Speicherplatz auf der Platte, sind aber trotzdem les- und in manchen Fällen auch beschreibbar. 
15
+Ziel dieser Aufgabe ist es, mittels des externen Crates `procinfo` einige
16
+Prozessverwaltungs-Informationen kennen zu lernen, die das Betriebssystem beim
17
+Ausführen der Prozesse verwaltet. Fertige Programme wie **ps**, **htop** oder
18
+**pmap** verwenden diese Informationen, um über das System und Tasks Auskunft zu
19
+geben.
31 20
 
32
-Seinen Namen trägt dieses Verzeichnis daher, dass es für jeden laufenden Prozess ein Unterverzeichnis bereithält, das Informationen über diesen Prozess zur Verfügung stellt. Das Unterverzeichnis trägt als Namen die ProzessID (PID) des jeweiligen Prozesses. Es enthält unter anderem folgende Dateien:
33
-
34
-  * `cmdline` Die Kommandozeile, mit der der Prozess gestartet wurde, mit allen verwendeten Parametern.
35
-  * `cwd` (current working directory) Ein symbolischer Link auf das Verzeichnis, das beim Aufruf des Prozesses das aktuelle Arbeitsverzeichnis war.
36
-  * `environ` Die komplette Umgebung des Prozesses (Variablen, Funktionen usw.) sofern er eine Umgebung hat.
37
-  * `exe` Ein symbolischer Link auf das aufgerufene Programm, dass den Prozess ausmacht.
38
-  * `root` Ein symbolischer Link auf das Verzeichnis, das für den Prozess das Wurzelverzeichnis darstellt.
39
-
40
-Daneben finden sich weitere Informationen zu den verwendeten Ressourcen (Speicher, Libraries) und ein Unterverzeichnis **fd**, das die File-Descriptoren aller vom Prozess verwendeten Dateien enthält.
41
-
42
-Diese Information wird beispielsweise von den Programmen verwertet, die Prozess-Informationen ausgeben." (aus [Referenz][])
21
+Die Funktionalität der Programms wird auf die 3 Module aufgeteilt:
43 22
 
44
-Das `/proc` Verzeichnis steht nur unter Linux zu Verfügung. Daher müssen Programme, die auf `/proc` zugreifen auch auf einem Linux System erstellt und getestet werden.
23
+- `main.rs`: die Funktion `main()
24
+- `readproc.rs`: Handling der Funktionen, die angefragte Informationen aus dem
25
+  `proc/` Verzeichnis zu Verfügung stellen.
26
+- `pstree.rs`: Struct und Methoden, um einen 'pstree' darzustellen
45 27
 
28
+## Daten aus dem /proc Verzeichnis lesen
46 29
 
30
+"Das `/proc`-Verzeichnis ist kein wirkliches Dateisystem, sondern eine
31
+Schnittstelle zum Kernel. Die Dateien, die in diesem Verzeichnis liegen,
32
+benutzen keinen Speicherplatz auf der Platte, sind aber trotzdem les- und in
33
+manchen Fällen auch beschreibbar.
34
+
35
+Seinen Namen trägt dieses Verzeichnis daher, dass es für jeden laufenden Prozess
36
+ein Unterverzeichnis bereithält, das Informationen über diesen Prozess zur
37
+Verfügung stellt. Das Unterverzeichnis trägt als Namen die ProzessID (PID) des
38
+jeweiligen Prozesses. Es enthält unter anderem folgende Dateien:
39
+
40
+- `cmdline` Die Kommandozeile, mit der der Prozess gestartet wurde, mit allen
41
+  verwendeten Parametern.
42
+- `cwd` (current working directory) Ein symbolischer Link auf das Verzeichnis,
43
+  das beim Aufruf des Prozesses das aktuelle Arbeitsverzeichnis war.
44
+- `environ` Die komplette Umgebung des Prozesses (Variablen, Funktionen usw.)
45
+  sofern er eine Umgebung hat.
46
+- `exe` Ein symbolischer Link auf das aufgerufene Programm, dass den Prozess
47
+  ausmacht.
48
+- `root` Ein symbolischer Link auf das Verzeichnis, das für den Prozess das
49
+  Wurzelverzeichnis darstellt.
50
+
51
+Daneben finden sich weitere Informationen zu den verwendeten Ressourcen
52
+(Speicher, Libraries) und ein Unterverzeichnis **fd**, das die File-Descriptoren
53
+aller vom Prozess verwendeten Dateien enthält.
54
+
55
+Diese Information wird beispielsweise von den Programmen verwertet, die
56
+Prozess-Informationen ausgeben." (aus [Referenz][])
57
+
58
+Das `/proc` Verzeichnis steht nur unter Linux zu Verfügung. Daher müssen
59
+Programme, die auf `/proc` zugreifen auch auf einem Linux System erstellt und
60
+getestet werden.
47 61
 
48 62
 ## Externe Crate nutzen
49
-Um nicht selbst im Programm auf die nötigen Dateien per File E/A im ´/proc´ zugreifen zu müssen, wird zum Auslesen eine externe Crate benutzt. Die Crate *[procinfo][]* stellt dazu die nötigen Funktionen zu Verfügung. Die Funktionen liefern in einem Result eine Datenstruktur, aus der wir die benötigten Informationen komfortabel auslesen können. Verwenden Sie in Ihrem Programm soweit wie möglich die Funktionen des externen Crates *procinfo*, auch wenn in der Standard-Bibliothek ebenfalls Funktionen für einzelne Aufgaben zu Verfügung stehen.
50 63
 
64
+Um nicht selbst im Programm auf die nötigen Dateien per File E/A im ´/proc´
65
+zugreifen zu müssen, wird zum Auslesen eine externe Crate benutzt. Die Crate
66
+*[procinfo][]* stellt dazu die nötigen Funktionen zu Verfügung. Die Funktionen
67
+liefern in einem Result eine Datenstruktur, aus der wir die benötigten
68
+Informationen komfortabel auslesen können. Verwenden Sie in Ihrem Programm
69
+soweit wie möglich die Funktionen des externen Crates *procinfo*, auch wenn in
70
+der Standard-Bibliothek ebenfalls Funktionen für einzelne Aufgaben zu Verfügung
71
+stehen.
51 72
 
52 73
 ## Optionalen Parameter parsen
53 74
 
54
-Der Optionale Parameter PID (u32) entscheidet darüber, ob Ihr Programm die Funktionen des Moduls `readproc.rs` oder `pstree.rs` verwendet. Wird kein Parameter angegeben, so werden die Funktionen des Moduls `readproc.rs` benutzt.
55
-
75
+Der Optionale Parameter PID (u32) entscheidet darüber, ob Ihr Programm die
76
+Funktionen des Moduls `readproc.rs` oder `pstree.rs` verwendet. Wird kein
77
+Parameter angegeben, so werden die Funktionen des Moduls `readproc.rs` benutzt.
56 78
 
57 79
 ## Aufgaben
58 80
 
59 81
 ### Externe Crate in Dependencies eintragen
60 82
 
61 83
 - Benutzen Sie für die folgenden Aufgaben das *[procinfo][]* Crate.
62
-- Fügen Sie dazu den notwendigen Eintrag unter `[dependencies]` in **Cargo.toml** hinzu.
63
-- Um auf die nötige Funktionen des Crate zugreifen zu können schreiben Sie NUR in **main.rs** bitte folgenden Zeilen an den Beginn der Datei:
84
+- Fügen Sie dazu den notwendigen Eintrag unter `[dependencies]` in
85
+  **Cargo.toml** hinzu.
86
+- Um auf die nötige Funktionen des Crate zugreifen zu können schreiben Sie NUR
87
+  in **main.rs** bitte folgenden Zeilen an den Beginn der Datei:
64 88
 
65 89
  ```Rust
66 90
  extern crate procinfo;
67 91
  ```
68 92
 
69
-Benutzen Sie in Ihren Modulen `readproc.rs` und `pstree.rs` die `use` Anweisung geeignet, um auf die nötigen Funktionen des Crate *procinfo* in den Modulen zugreifen zu können.
93
+Benutzen Sie in Ihren Modulen `readproc.rs` und `pstree.rs` die `use` Anweisung
94
+geeignet, um auf die nötigen Funktionen des Crate *procinfo* in den Modulen
95
+zugreifen zu können.
70 96
 
71
-In der Crate *procinfo* wird als Return ein Result Typ mit nur dem OK Typ benutzt. Der Err Typ ist scheinbar nicht im Result enthalten. Wenn man allerdings die Info der Standardbibliothek zu [io::Result][] liest, erfährt man, dass es sich hier um einen Alias handelt, der komfortableres Arbeiten mit Errors erlaubt. Dazu kommen wir aber erst in späteren Kapiteln, wenn wir uns dem `?` Makro nähern. Daher bitte hier in der Aufgabe noch keine Makros wie `try` und `?` benutzen.
97
+In der Crate *procinfo* wird als Return ein Result Typ mit nur dem OK Typ
98
+benutzt. Der Err Typ ist scheinbar nicht im Result enthalten. Wenn man
99
+allerdings die Info der Standardbibliothek zu [io::Result][] liest, erfährt man,
100
+dass es sich hier um einen Alias handelt, der komfortableres Arbeiten mit Errors
101
+erlaubt. Dazu kommen wir aber erst in späteren Kapiteln, wenn wir uns dem `?`
102
+Makro nähern. Daher bitte hier in der Aufgabe noch keine Makros wie `try` und
103
+`?` benutzen.
72 104
 
73 105
 ### `readproc.rs`: Eigene Prozessinformationen auslesen
74 106
 
75
-Ziel dieser Teilaufgabe ist es das Crate *procinfo* kennen zu lernen und sich noch ein wenig mit dem Return Typ 'Result' und der Fehlerbehandlung zu üben.
107
+Ziel dieser Teilaufgabe ist es das Crate *procinfo* kennen zu lernen und sich
108
+noch ein wenig mit dem Return Typ 'Result' und der Fehlerbehandlung zu üben.
76 109
 
77
-Die folgenden Funktionen werden im Modul `readproc.rs` implementiert. Alle Funktionen reichen mögliche Fehler über einen Result zurück zur aufrufenden Funktion. Keine der Funktionen darf im Fehlerfall einen Programmabbruch erzwingen.
110
+Die folgenden Funktionen werden im Modul `readproc.rs` implementiert. Alle
111
+Funktionen reichen mögliche Fehler über einen Result zurück zur aufrufenden
112
+Funktion. Keine der Funktionen darf im Fehlerfall einen Programmabbruch
113
+erzwingen.
78 114
 
79
-1. Schreiben Sie die Funktion `fn self_pids() -> Result<(i32, i32), &'static str>`, die die eigene PID und die PPID in einem Tupel (PID,PPID) Im Erfolgsfall zurückgibt.
115
+1. Schreiben Sie die Funktion `fn self_pids() -> Result<(i32, i32), &'static
116
+   str>`, die die eigene PID und die PPID in einem Tupel (PID,PPID) Im
117
+   Erfolgsfall zurückgibt.
80 118
 
81
-   > Hinweis: Überlegen Sie sich, ob `stat()` und der `stat_self()` die geeignetere Funktion im *procinfo* Crate für diesen Fall ist.
119
+   > Hinweis: Überlegen Sie sich, ob `stat()` und der `stat_self()` die
120
+   > geeignetere Funktion im *procinfo* Crate für diesen Fall ist.
82 121
 
83
-2. Schreiben Sie die Funktion `fn get_pid_command(pid: i32) -> Result<String, &'static str>`, die den Command Namen zu einer PID zurück liefert. Wird die PID nicht gefunden im System, so soll die Funktion den String "PID not alive: no command name found" zurück geben.
122
+1. Schreiben Sie die Funktion `fn get_pid_command(pid: i32) -> Result<String,
123
+   &'static str>`, die den Command Namen zu einer PID zurück liefert. Wird die
124
+   PID nicht gefunden im System, so soll die Funktion den String "PID not alive:
125
+   no command name found" zurück geben.
84 126
 
85
-3. Schreiben Sie die Funktion `fn get_last_created_command() -> Result<String, &'static str>`, die den Command Namen des zuletzt erzeugten Prozesses im System zurück gibt. Wird die PID nicht gefunden im System, so soll die Funktion den String "No last command via PID found" zurück geben.
127
+1. Schreiben Sie die Funktion `fn get_last_created_command() -> Result<String,
128
+   &'static str>`, die den Command Namen des zuletzt erzeugten Prozesses im
129
+   System zurück gibt. Wird die PID nicht gefunden im System, so soll die
130
+   Funktion den String "No last command via PID found" zurück geben.
86 131
 
87 132
    > Tip: `loadavg()` Funktion.
88 133
 
89
-4. Schreiben Sie die Funktion `fn get_thread_count(pid: i32) -> Result<u32, &'static str>`, die die Anzahl der Threads pro PID zurückliefert. Wird die PID nicht gefunden im System, so soll die Funktion den String "PID not alive: no threads counted" zurück geben.
134
+1. Schreiben Sie die Funktion `fn get_thread_count(pid: i32) -> Result<u32,
135
+   &'static str>`, die die Anzahl der Threads pro PID zurückliefert. Wird die
136
+   PID nicht gefunden im System, so soll die Funktion den String "PID not alive:
137
+   no threads counted" zurück geben.
90 138
 
91
-5. Benutzen Sie nun Ihre Funktionen geeignet, um in Ihrer `main() Funktion folgende Ausgaben zu produzieren:
139
+1. Benutzen Sie nun Ihre Funktionen geeignet, um in Ihrer `main()` Funktion
140
+   folgende Ausgaben zu produzieren:
92 141
 
93 142
    ```text
94 143
     My PID : 31894 - process1 running 4 threads
@@ -96,20 +145,28 @@ Die folgenden Funktionen werden im Modul `readproc.rs` implementiert. Alle Funkt
96 145
     Last process created in system was: process3
97 146
    ```
98 147
 
99
-   > Hinweis: Die Nummer und Command Namen sind bei Ihnen verschieden. Wenn Sie Probleme beim Aufruf Ihres Programms über **cargo run** haben lesen Sie unbedingt die nächste Frage!
148
+   > Hinweis: Die Nummer und Command Namen sind bei Ihnen verschieden. Wenn Sie
149
+   > Probleme beim Aufruf Ihres Programms über **cargo run** haben lesen Sie
150
+   > unbedingt die nächste Frage!
100 151
 
101
-6. Sie können Ihr Programm über:
152
+1. Sie können Ihr Programm über:
102 153
 
103 154
    - **cargo run** oder
104 155
    - **./target/debug/task1** starten.
105 156
 
106
-   Überlegen Sie sich, wie es zu den unterschiedlichen Ausgaben und Programmverhalten kommt.
157
+   Überlegen Sie sich, wie es zu den unterschiedlichen Ausgaben und
158
+   Programmverhalten kommt.
107 159
 
108
-7. Schreiben Sie die Funktion `fn get_task_total() -> Result<u32, &'static str>`, die die Gesamtmenge aller Tasks im System zurück liefert. Wird die Gesamtmenge nicht gefunden, so soll die Funktion den String "No total count of tasks in system found" zurück geben.
160
+1. Schreiben Sie die Funktion `fn get_task_total() -> Result<u32, &'static
161
+   str>`, die die Gesamtmenge aller Tasks im System zurück liefert. Wird die
162
+   Gesamtmenge nicht gefunden, so soll die Funktion den String "No total count
163
+   of tasks in system found" zurück geben.
109 164
 
110
-   > Warum z.B. zeigt Ihnen das Programm **htop** eine andere Anzahl von Prozessen als Ihre ausgelesene Funktion?
165
+   > Warum z.B. zeigt Ihnen das Programm **htop** eine andere Anzahl von
166
+   > Prozessen als Ihre ausgelesene Funktion?
111 167
 
112
-8. Schreiben Sie die Funktion `fn get_ownprocess_mem() -> Result<(usize,usize,usize), &'static str>`, die in einem Tuple die Werte für:
168
+1. Schreiben Sie die Funktion `fn get_ownprocess_mem() ->
169
+   Result<(usize,usize,usize), &'static str>`, die in einem Tuple die Werte für:
113 170
 
114 171
    - vsize
115 172
    - code und
@@ -117,7 +174,9 @@ Die folgenden Funktionen werden im Modul `readproc.rs` implementiert. Alle Funkt
117 174
 
118 175
    zurück liefert.
119 176
 
120
-9. Im Modul `main.rs` produzieren Sie die Ausgabe für die Kommandozeile und kümmern sich um evtl. Fehler. Bei korrektem Programmablauf ergibt sich folgende Ausgabe (genau 5 Zeilen!):
177
+1. Im Modul `main.rs` produzieren Sie die Ausgabe für die Kommandozeile und
178
+   kümmern sich um evtl. Fehler. Bei korrektem Programmablauf ergibt sich
179
+   folgende Ausgabe (genau 5 Zeilen!):
121 180
 
122 181
    ```text
123 182
    My PID : 31894 - process1 running 4 threads
@@ -129,49 +188,70 @@ Die folgenden Funktionen werden im Modul `readproc.rs` implementiert. Alle Funkt
129 188
 
130 189
 ### `pstree.rs`: Prozesskette ausgeben
131 190
 
132
-1. Auf Basis des Crate *procinfo* sollen Sie bei Aufruf des Programms mit einer PID, ausgehend von dieser PID der Tree bis zum aktuellen Programm ausgegeben werden. Wird somit als Argument eine `1` angegeben, wird eine Funktionalität des Kommandozeilen Programms **pstree** nachgebildet. Wenn Sie sich z.B. mit dem Kommando **ps** die PID Ihrer aktuellen Shell anzeigen lassen, können Sie sich durch Aufruf von **pstree -p -s PID** die Kette aller Elternprozesse dieser PID anzeigen lassen.
191
+1. Auf Basis des Crate *procinfo* sollen Sie bei Aufruf des Programms mit einer
192
+   PID, ausgehend von dieser PID der Tree bis zum aktuellen Programm ausgegeben
193
+   werden. Wird somit als Argument eine `1` angegeben, wird eine Funktionalität
194
+   des Kommandozeilen Programms **pstree** nachgebildet. Wenn Sie sich z.B. mit
195
+   dem Kommando **ps** die PID Ihrer aktuellen Shell anzeigen lassen, können Sie
196
+   sich durch Aufruf von **pstree -p -s PID** die Kette aller Elternprozesse
197
+   dieser PID anzeigen lassen.
133 198
 
134 199
    ```text
135 200
    systemd(1)---sshd(1264)---sshd(7161)---sshd(7198)---zsh(7199)---pstree(47200)
136 201
    ```
137 202
 
138
-   Genau diese Ausgabe soll nun ihr Programm erzeugen bei der Option '1'. Geben Sie im obigen Beispiel die PID 7161 als Parameter an, so wird nur der Teil-Tree ausgegeben, startend vom Prozess mit PID 7161.
203
+   Genau diese Ausgabe soll nun ihr Programm erzeugen bei der Option '1'. Geben
204
+   Sie im obigen Beispiel die PID 7161 als Parameter an, so wird nur der
205
+   Teil-Tree ausgegeben, startend vom Prozess mit PID 7161.
139 206
 
140 207
    ```text
141 208
    sshd(7161)---sshd(7198)---zsh(7199)---pstree(47200)
142 209
    ```
143 210
 
144
-   Ausgehend von der eigenen pid sollen alle Elternpid bis zum übergebenen PID (z.B. 1 für init Prozess, hier `systemd`) angezeigt werden. Der Init Prozess (hier systemd) hat immer die PID 1 in UNIX Systemen.
211
+   Ausgehend von der eigenen pid sollen alle Elternpid bis zum übergebenen PID
212
+   (z.B. 1 für init Prozess, hier `systemd`) angezeigt werden. Der Init Prozess
213
+   (hier systemd) hat immer die PID 1 in UNIX Systemen.
145 214
 
146
-2. Nutzen Sie zum parsen der PID im Argument die `parse()` Funktion. Behandeln Sie folgende Fehler:
215
+1. Nutzen Sie zum parsen der PID im Argument die `parse()` Funktion. Behandeln
216
+   Sie folgende Fehler:
147 217
 
148 218
    - Parameter ist keine Zahl
149 219
    - Parameter ist keine Elternpid
150 220
    - Mehr als 2 Parameter werden bei Aufruf mit angegeben.
151 221
 
152
-   Geben Sie im Fehlerfall eine entsprechende Meldung in einer(1!) Zeile aus und beenden Sie das Programm mit dem Exitcode 1. Eine möglich Ausgabe:
222
+   Geben Sie im Fehlerfall eine entsprechende Meldung in einer(1!) Zeile aus und
223
+   beenden Sie das Programm mit dem Exitcode 1. Eine möglich Ausgabe:
153 224
 
154 225
    ```text
155 226
    $ ./task1 2 3
156 227
    Correct usage: no param or param PID
157 228
    ```
158 229
 
159
-   >Wichtig: Im Fehlerfall beenden Sie das Programm kontrolliert mit exit(1). Den Fehlercode '1' überprüfen die Tests in tests/output.bats!
230
+   >Wichtig: Im Fehlerfall beenden Sie das Programm kontrolliert mit exit(1).
231
+   >Den Fehlercode '1' überprüfen die Tests in tests/output.bats!
160 232
 
161
-3. Erstellen Sie eine eigene Datenstruktur und Methoden um die Aufgabe zu lösen. Verwenden Sie nur die externe Crate *procinfo* dazu. Die Ausgabe beim Aufruf Ihres Programms muss dieses Format haben:
233
+1. Erstellen Sie eine eigene Datenstruktur und Methoden um die Aufgabe zu lösen.
234
+   Verwenden Sie nur die externe Crate *procinfo* dazu. Die Ausgabe beim Aufruf
235
+   Ihres Programms muss dieses Format haben: 
162 236
 
163 237
     ```text
164 238
     systemd(1)---sshd(1264)---sshd(7161)---sshd(7198)---zsh(7199)---cargo(47150)---task2(47151)
165 239
     ```
166
-   > Je nachdem wie Sie Ihr Programm aufrufen wird es natürlich andere Ausgaben produzieren. Durch das Kommandozeilen-Tool **pstree** können Sie Ihre Ausgabe kontrollieren!
240
+   > Je nachdem wie Sie Ihr Programm aufrufen wird es natürlich andere Ausgaben
241
+   > produzieren. Durch das Kommandozeilen-Tool **pstree** können Sie Ihre
242
+   > Ausgabe kontrollieren!
167 243
 
168
-4. Schreiben Sie eine eigene unit Test Datei `unit_test_pstree.rs`, die Ihre Funktionen im Modul `pstree.rs` geeignet testet und beim Aufruf von **cargo test** die Tests ausführt.
244
+1. Schreiben Sie eine eigene unit Test Datei `unit_test_pstree.rs`, die Ihre
245
+   Funktionen im Modul `pstree.rs` geeignet testet und beim Aufruf von **cargo
246
+   test** die Tests ausführt.
169 247
 
170
-5. Schreiben Sie ausreichend Kommentare, um Ihre Implementierung in `pstree.rs` über die per **cargo doc** erstellten Dokumentation nachvollziehen zu können.
248
+1. Schreiben Sie ausreichend Kommentare, um Ihre Implementierung in `pstree.rs`
249
+   über die per **cargo doc** erstellten Dokumentation nachvollziehen zu können.
171 250
 
172 251
 ## Kontrolle Ihres Repositories
173 252
 
174
-Haben Sie die Aufgaben komplett bearbeitet, so sollten sich folgende Dateien in Ihrem HW (Homework) Verzeichnis befinden:
253
+Haben Sie die Aufgaben komplett bearbeitet, so sollten sich folgende Dateien in
254
+Ihrem HW (Homework) Verzeichnis befinden:
175 255
 
176 256
 ```text
177 257
 .
@@ -190,8 +270,6 @@ Haben Sie die Aufgaben komplett bearbeitet, so sollten sich folgende Dateien in
190 270
 2 directories, 9 files
191 271
 ```
192 272
 
193
-
194
-
195 273
 [Referenz]: http://www.linux-praxis.de/lpic1/lpi101/proc.html
196 274
 [procinfo]: https://docs.rs/procinfo/0.3.1/procinfo/
197 275
 [io::Result]: https://doc.rust-lang.org/std/io/type.Result.html

Loading…
Cancel
Save