Mittels Fork() bestimmte Anzahl Generationen erzeugen

Wallnussfolie

Grünschnabel
Hallo :) Bin neu hier im Forum und hoffe dass mein Problem noch nicht in einem anderen Beitrag diskutiert wurde. Ich habe danach gesucht, auch mittels Google, konnte aber keine Antworten finden.
Zuerst kurz etwas zu meinem System, mit dem ich programmiere:
-Intel Core i5 3230M
-Kubuntu 64 Bit, (Linux 3.13.0-39-generic, KDE 4.13.2)
-Compiler: GCC

Nun zu meinem Problem: Ich möchte mittels fork() eine bestimmte Anzahl an Generationen erzeugen, heißt also, wenn man 4 Generationen möchte, dann gibt es einen "Urprozess", dieser hat einen Sohn, dieser wiederum einen Sohn und dieser auch wieder einen (Die Betonung liegt auf "einen"). Die Prozesse sollen sich dann alle schlafen legen und dann sich nacheinander beenden, angefangen bei der höchsten Generation (im Beispiel wäre das also Generation 4).

Ich habe jetzt die letzten 2 Tage vergeblich versucht, das Problem zu lösen, aber jedes mal entstehen eine unendliche Menge an Söhnen, was ich über das Kommando pstree sehen konnte.

Ich hoffe, jemand von euch kann mir bei diesem Problem helfen, ich bedanke mich schonmal im Voraus!

Hier nun der Code:
C++:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
	int i, returnwert;
	for (i = 1; i = 5; i++)
	{
		returnwert = fork();
		if (returnwert != 0)
		{
			break;
			wait();
			exit(0);
		}
	}
	sleep(5);
	exit(0);
	return 0;
}
 
Zuletzt bearbeitet von einem Moderator:
Hi

Die Schleife läuft nicht, solange i kleiner 5 ist, sondern solange man 5 zu i zuweisen kann => endlos.
Und die zwei Zeilen nach dem break sind überflüssig, weil sie nie erreicht werden können.

(Hab mir erlaubt, deinen Code im Beitrag etwas einzurücken usw., hilft für die Übersicht)
 
Dank dir für deine Hilfe! Ich habe es nun endlich geschafft, das Programm funktioniert so, wie es soll!:)
Hier nun der fertige Quellcode, falls es jemanden interessiert:
C++:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>


int main(int argc, char *argv[])

{
   int i;
   int returnwert;
   int id;
   int x;
   x=atoi(argv[1]);
   id = getpid();
   printf("Ich bin der Urprozess (ID=%d), mit mir entstehen nun %d Generationen!\n",id,x);
   for (i=1; i<x;i++)
   {
  
     returnwert=fork();
     id=getpid();

        if (returnwert!=0) /*Väter (Prozesse,die bereits einen Sohn haben) verlassen die Schleife */
       { 
           printf("%d te Generation(ID=%d verlässt Schleife und wartet!\n",i,id);
           break;
       }
  
   }
  
  if (returnwert==0) /*für die letzte Generation */
  
      { 
          printf("Letzte Generation(ID=%d) hat die Schleife verlassen, legt sich nun schlafen!\n",id=getpid());
          sleep(10);
          printf("ID=%d beendet sich jetzt!\n",id=getpid());
          exit(0);
  
      }

  /*Väter (Prozesse,die bereits einen Sohn haben) setzen hier fort */ 

  wait();
  id=getpid();
  printf("ID=%d beendet sich jetzt!\n",id);
  exit(0);
  
  
return 0;
}
 

Neue Beiträge

Zurück