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