C-Programm - fork()-Baum erzeugen



  • Hallo Community,

    leider muss ich aktuell ein Fach belegen was sich mit der Unix-Programmierung auseinandersetzt. Wie es oft so ist liegt einem nicht jedes Fach 🕶 .
    Aber ich will nicht meckern sondern einfach MACHEN 😃 .

    So kommen wir mal zu der Aufgabe, wir sollen in C ein fork()-Baum erzeugen.
    So wie hier dargestellt:

    http://img4web.com/tbnl/BPMVX.png

    Zusätzlich sollen wir zu jeder Textausgabe die PID des Prozesses in folgender Form ausgeben:
    [PID: ****, PPID: ****] <sinnvoller Text>

    Es sind noch weitere Teilaufgaben drin (z.B. Prozess 3 schlafen legen für 6 sek. usw.), aber ich will mich erst mal auf die Erzeugung vom Vaterprozess zu den Kindprozessen einlassen 😉 .

    Zu aller erst würde ich den Code Posten wo ich nur vom Vaterprozess ein Kindprozess erzeuge was auch Funktioniert.

    #include<stdio.h>
    #include<unistd.h>
    #include<stdlib.h>
    
    int main()		
    {
    
    int IchBinDerVater = fork();
    if (IchBinDerVater>0) {
    	printf("[PID %d, PPID: %d] Ich bin Der Vater \n", getpid(), getppid()); 
    	}else{
    	printf("[PID %d, PPID: %d] Ich bin das Kind \n", getpid(), getppid()); 
    	}
    	system("ps");	
    	system("top");		
    	return 0;
    }
    
    Ausgabe Console:
    * [PID 3288, PPID: 2940] Ich bin der Vater 
    * [PID 3289, PPID: 3288] Ich bin das Kind
    

    Soweit so gut. Das Funktioniert Prima wie ich finde, natürlich kann man mir immer Tipps geben wie es besser geht 😉 .

    Nun kommen wir aber zu dem Problem was ich habe, wir sollen zum Vaterprozess zwei Kinderprozesse erzeugen und jedes Kind hat noch ein Extra Kind (siehe oben URL).

    Und hier ist halt mein Problem ein Kind erzeugen kein Problem aber jetzt 2 und noch jeweils zu den 2 ein Kind...mhhh
    Ich hab zu erst, erst mal die zwei Kinder vom Vaterprozess erzeugt siehe Code:

    #include<stdlib.h>
    #include<stdio.h>
    #include<unistd.h>
    #include<sys/types.h>
    
    int main (){ 
    
    	pid_t IchBinDerVater1, IchBinDerVater2;
    	IchBinDerVater1 = fork();
    
    	if(IchBinDerVater1 == 0){
    
            	printf("[PID: %d,PPID: %d] P4\n",getpid(), getppid());
    
    	}else{
    		printf("[PID: %d,PPID: %d] P1\n",getpid(), getppid());
    		IchBinDerVater2=fork();
    		wait();
    	}
    
    	if(IchBinDerVater2 == 0){
                   	printf("[PID: %d,PPID: %d] P2\n",getpid(), getppid());
    	}else{
    
    		wait();
      	}
    return 0;
    }
    
    [PID: 1962,PPID: 1890] P1
    [PID: 1963,PPID: 1962] P4
    [PID: 1964,PPID: 1962] P2
    

    Ich denke mal das es so OK ist oder? Für Verbesserungen bin ich immer offen 😃 .

    Nun hab ich aber keinen Ansatz für die zwei weiteren Kinder zu jeweils dem anderen Kind.

    Und dann gleich vorab die Frage warum der Compiler mir dieses Warning auswirft:

    Aufgabe_2.c:18:3: Warnung: Implizite Deklaration der Funktion »wait« [-Wimplicit-function-declaration]
    

    Ich hoffe ich hab es verständlich und gut strukturiert erläutert 😉 .

    Vielen Dank schon mal Vorab für eure Zeit.



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (C89 und C99) in das Forum Linux/Unix verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • guckst du manpage

    #include <sys/wait.h>
    

Anmelden zum Antworten