Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
programm prozess madness
Ich hänge gerade bei der Altklausur Februar 2013 bei der 1.1e)
Die Frage lautet:
Man unterscheidet die Begriffe Programm und Prozess. Welche der folgenden Aussagen zu diesem Themengebiet ist richtig?
- Der Prozess ist der statische Teil (Rechte, Speicher, etc.), das Programm der aktive Teil (Programmzähler, Register, Stack)
- Wenn ein Programm nur einen aktiven Ablauf enthält, nennt man diesen Prozess, enthält das Programm mehrere Abläufe, nennt man diese Threads
- Ein Prozess ist ein Programm in Ausführung, ein Prozess kann aber auch mehrere verschiedene Programme ausführen
- Ein Prozess kann mit Hilfe von Threads mehrere Programme gleichzeitig ausführen
die ersten zwei müssten falsch sein.
die 3. und 4. antwort kommen mir aber so ähnlich vor, dass ich nicht entscheiden kann, welche davon falsch ist.
wenn ich an die clash oder rush zurückdenke, dann machen die doch genau das, was 3 behauptet.
Ich starte einen prozess (= clash/rush), der mehrere threads erzeugt, die dann programme ausführen.
Kann ich aber nicht mehrere threads gleichzeitig starten, die dann verschiedene Programme gleichzeitig ausführen?
also ich hätte das so gedacht:
1 falsch: Das Programm ist nicht der aktive Teil
2 richtig: hätte gesagt das stimmt
3 falsch: In einem Prozess kann immer nur ein Programm ausgeführt werden, man muss ja forken um ein zweites Progamm zu execen und bekommt ne neue PID - also neuer Prozess
4 falsch: um in einem Thread einen neues Programm auszuführen wird in dem thread ein neuer Prozess gestartet (fork und exec).
also die 2 hatte ich auch zuerst als richtige antwort. da steckt schon irgendwie wahres drin, aber die formulierung ist schon echt merkwürdig.
„Wenn ein Programm nur einen aktiven Ablauf enthält, nennt man diesen Prozess…“ würde für mich heißen, dass man das programm nicht mehr als prozess bezeichnet, wenn es sich in ausführung befindet, wenn es aus mehreren abläufen „besteht“ . das bezweifle ich aber. ein prozess ist ein programm, das sich in ausführung befindet (vorlesungsfolien SPI). damit würde ich 2 ausschließen.
es steht ja nichts von gleichzeitig da. kann ich nicht ein programm schreiben, das ohne zu forken einfach seriell zwei programme mittels exec ausführt, oder muss ich unbedingt forken?
also ich hätte jetzt gesagt, dass sobald ich ein Programm ausführe der Prozess durch das Programm ersetzt wird
so wie hier beschrieben:
Richtig ist Antwort 3)
[quote=[hedgehogs dilemma = 42]]
3 falsch: In einem Prozess kann immer nur ein Programm ausgeführt werden, man muss ja forken um ein zweites Progamm zu execen und bekommt ne neue PID - also neuer Prozess
[/quote]
Das stimmt so nicht. Man muss nicht forken, um execve aufzurufen. Und execve ändert die PID nicht - es ist immer noch der selbe Prozess.
Nein. Um ein anderes Programm auszuführen, muss ich ja exec aufrufen. Und die manpage von execve sagt:
Nach dem exec läuft also erst mal ein Thread weiter. Dieser kann dann weitere Threads erzeugen, die dann aber immer nur das selbe Programm wie die anderen Threads ausführen - es sei denn, einer von ihnen exect und tötet somit die anderen Threads.
So ist also ein Programm aufgebaut, das Antwort 3) entspricht?
Ist das sinnvoll/geläufig? Kannst du vielleicht ein Beispiel nennen, das so funktioniert?
Hier ein Minimalbeispiel:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void) {
execl("/bin/echo", "echo", "Hello world!", NULL);
perror("/bin/echo");
return EXIT_FAILURE;
}
In dem betreffenden Prozess wird zuerst dieses Programm und danach das Programm [m]/bin/echo[/m] ausgeführt werden.
ah jetzt
Vielen Dank
Naheliegender als gedacht, oder?
Klar
So wie das in dem Satz beschrieben war, hätte ich mit Krasserem gerechnet