fork() verzweigungsproblem



  • hi,

    und zwar würde ich gerne wissen wie ich mit fork() 2 verzweigungen erstellen kann, von einem von mir erstellten vaterprozess!

    bsp:

    -----------1 <- erstelle ich bereits mit fork()

    -----2-------------4

    3---------------5------6

    ---------------------------7

    der linke baum mit 2 und 3 habe ich erstellt nur wie kriege ich den rechten zweig hin?

    sobald ich in meinem ersten prozess forke und die 4 erstelle, erstelle ich ja auch im linken zweig neue prozesse...

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/types.h>
    
    int main(void)
    {
    	int forkID1, forkID2, forkID3, forkID4, forkID5, forkID6, forkID7;// ID der Prozesse
    
    	forkID1 = fork(); // Vaterprozess erstellen
    
    	// Prüfung ob fork() eine negative Zahl geliefert hat
    	kontrolle(forkID1);
    
    	// Ist der der Rückgabewert gleich 0 ist es der Kindprozess
    	if ( forkID1  == 0 )
    	{   
    		printf("\n[PID: %d, PPID: %d] Prozess 1!\n",getpid());
    		forkID2 = fork();
    		kontrolle(forkID2);		
    
    		if( forkID2 == 0 )
    		{
    			printf("\n[PID: %d, PPID: %d] Prozess 2 - Sohn von 1\n",getpid(),getppid());
    			forkID3 = fork();
    			kontrolle(forkID3);
    
    			if ( forkID3 == 0 )
    			{
    				printf("\n[PID: %d, PPID: %d] Prozess 3 - Sohn von 2!\n",getpid(),getppid());
    				printf("Ich gehe jetzt schlafen\n");
    				sleep(6);
    				printf("ausgeschlafen...\n");
    			}
    		}
    	}
    }
    // so gehts ja nicht, da er mir ja dann bei allen kindern wieder kinder erzeugt...
    	if ( forkID1 == 0 )
    	{
    	    forkID4 = fork();
    		kontrolle(forkID4);
    
    		if( forkID4 == 0 )
    		{ // usw...
    int kontrolle(int id)
    {
      if ( id < 0 )
        exit(0);
    }
    

    danke und gruß
    pedro



  • Ist doch einfach

    int main() {
      if(fork() == 0) { // 1
        if(fork() == 0) { // 2
          if(fork() == 0) { } // 3
        }
        else if(fork() == 0) { // 4
          if(fork() == 0) { } // 5
          else if(fork() == 0) { // 6
            if(fork() == 0) { } // 7
          }
        }
      }
    }
    


  • danke dir rüdiger. werde ich später mal probieren. bin noch nicht ganz so vetraut mit prozessen...



  • *edit* erledigt


Log in to reply