Fork() system call

Hallo, gibt es hier leute die sich gut mit Fork() in C - Code auskennen?
Ich hätte ein paar fragen wo ich nicht weiterkomme.
Danke
 
Hallo,
ich bin zwar kein Experte in C. Aber diese Befehle sind im Netz doch wirklich gut dokumentiert.
Das was ich jetzt in zwei Minute ueber fork() rausgefunden habe, ist das er einfach einen neuen Prozess startet. So wie call in einer Batchdatei, bei dem die Starterbziehung aufrecht erhalten bleibt.
Also Vater Sohn Folge
Im Prozessexplorer siehst Du das daran, dass die Sohn-Prozesse eingerueckt sind und Du sie beim Vaterprozess mit dem Minus ausblenden kannst.
Aber jetzt bin ich gespannt auf Deine Frage.
 
Meine frage wäre , wenn ich z.b.
fork() dann würde ich einen Vater -> kind erzeugen also 2^n richtig?
Wenn jetzt
fork()
fork()
fork()
würden dann 2^3 also 9 prozesse entstehen? oder zählt man den Vater nicht mit?
und wie würde man z.b. 5 prozesse erzeugen?

Danke
 
Meine frage wäre , wenn ich z.b.
fork() dann würde ich einen Vater -> kind erzeugen also 2^n richtig?
Wenn jetzt
fork()
fork()
fork()
würden dann 2^3 also 9 prozesse entstehen? oder zählt man den Vater nicht mit?
und wie würde man z.b. 5 prozesse erzeugen?

Danke
also ich nehme mal an, dass es hier um Komplexitaet geht.
Du scheinst das Konzept noch nicht ganz verstanden zu haben.
Wenn in einem Programm der fork("kind")-Befehl vorkommt, wird ein neuer Prozess mit dem Namen "Kind" erzeugt. Wenn es fork(2) ist, dann ist der neue Prozess eine Kopie von dem, der schon gerade mit diesem Kommando laeuft.
Wenn Du in einem Prozess vier mal fork benutzt, hast Du nach dem letzten fork insgesamt 5 Prozesse mehr, abgesehen von denen, die schon da waren und die, die die Kinder gemacht haben.

Und Du solltest Deinem Mathe-Kenntnisse etwas verbessern.
2^3 ist 8 und nicht 9
 
fork.JPG
Nur damit ich das am ende richtig verstehen. Habe versucht das visuell zu konstruieren
Wenn ich jetzt
fork()
fork()
fork()
hätte , würde das so dann aussehen? Wahrscheinlich nicht , da es 8 prozesse sein müssten?
Sorry wenn das eine triviale frage ist.
 
Den Anhang 62567 betrachten
Nur damit ich das am ende richtig verstehen. Habe versucht das visuell zu konstruieren
Wenn ich jetzt
fork()
fork()
fork()
hätte , würde das so dann aussehen? Wahrscheinlich nicht , da es 8 prozesse sein müssten?
Sorry wenn das eine triviale frage ist.
hallo,
scheinst es immer noch nicht ganz richtig verstanden zu haben:
Ich habe keine Ahung, was fork ohne Argument macht. Muesste ich nachlesen, aber so wie ich das verstanden habe, scheinst du die fork(2) Anweisung zu meinen, die eine Kopie vom Vater erzeugt.
Wenn der Vater die drei fork(2) ohne Bedingung einfach so drin stehen hat, dann wird Dein System mit Prozessen reichlich schnell "ueberschwemmt".
1. Generation: 1 Vater und 3 Kinder
2. Generation: 1 Opa, 3 Vaeter und 9 Kinder
3. Generation: 1 Uhropa, 3 Opas, 9 Vaeter und 27 Kinder
Ich schaetze jetzt muesstest Du kapiert haben, wie es weiter geht.
Und beim Komputieren laufen die Generationen in Millisekunden
Wie die Gesammtformel fuer die n-te Generation aussieht knobel ich jetzt nicht aus, aber es kommt
n hoch 3 drin vor.
Also wenn wir annehmen, dass jede Generation eine Millisekunde braucht, dann hast du nach einer Sekunde
mehr als 1 000 000 000 Prozesse und das halten nicht mal Grossrechner aus.
Wenn natuerlich das die einzigen Operationen im Vaterprozess sind und er damit endet, hast du "nur" die Miliarde neue Prozesse pro Sekunde, wenn der Rechner nicht vorher abstuerzt.

Also wenn Du es mit Deinem PC versuchen willst, dann geh davon aus, dass Du ihn nicht mal so schnell Ausschalten kannst, wie er abstuerzt.

Dein Diagramm ist nur ein Teil von nur zwei mal fork(2) hintereinander.

Falls Du es immernoch nicht verstanden hast, solltest Du Dir vielleicht nochmal das hier durchlesen:

Frohe Weihnachten
 
Zuletzt bearbeitet:
Top