Ich schreibe Grade ein kleines Server Programm. Ich möchte mehrere Kind Prozesse erzeugen(fork(2)) die unterschiedlich lange arbeiten und dann Daten in eine Datei schreiben. Die Kind Prozesse sollen in der rein folge in die Datei schreiben in der sie erzeugt wurden.
Ich habe es wie folgt probiert.
Ich habe ein Kind Prozesse erzeugt und mir die PID gemerkt. Wenn ich dann das nächste mal eine Kind Prozesse erzeuge, weiß es noch die PID des zuletzt erzeugten Kind Prozesse, die seines älteren Bruder Prozesses. Ich wollte jetzt vor dem schreiben in die Datei mit waitpid() auf den Tod des älteren Kind Prozesses warten, dann schreiben und dann Prozess beenden.
leider erhalte ich von der Funktion waitpid() immer nur eine -1 und sie wartet nicht auf den älteren Bruder Prozess.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | npid=fork(); switch (npid) { case -1: printf("fehler\n"); break; case 0: ...// restlicher code if(apid) //apid ist 0 wenn dieses Kind das älteste aller Kind Prozesse ist. { waitpid(apid,NULL,WUNTRACED);//warten auf älteren Bruder } ...//schreiben in die Datei exit(EXIT_SUCCESS); break; default: apid=npid; //Vater merkt sich PID des älteren Sohn } } |
dieser Code block soll immer wieder aufgerufen werden bis das Server Programm beendet wird.
wäre nett wenn mir jemand helfen könnte.