006
22.09.2003, 15:34 Uhr
~xodi
Gast
|
also, ich habs nun doch (einigermaßen) elegant mit den forks hinbekommen. Waren im Grunde nur 30 Zeilen Code. Ich hab mir dabei zunutze gemacht, dass der sohnprozeß alle Daten des Vaters per copy-on-write erhält. anbei der Code, falls jemand sowas mal braucht.
Keep it simple :
C++: |
...
while(<noch Bedarf zu forken>) { variable = <irgend ein wert>; switch(kind=fork()) { case -1 : (void)fprintf(stdout, "Error forking the process!\n"); exit(-1);
case 0 : (void)sleep(1); // wir sind im Sohn und können hier nun auf "variable" zugreifen" exit(0); } }
// Signalhandler für Abbruch... (void) signal(SIGINT, catch);
for(i = 0;i < <anzahl prozesse>;i++) { kind=wait(&status); if(WEXITSTATUS(status) !=0) { (void)fprintf(stdout, "Ein Kind mit Signal %d beendet\n",WEXITSTATUS(status)); } (void)fprintf(stdout, "%s: 1 workprozess fertig / %d verbleibend\n",tmp = do_date(time((time_t *)NULL), (char) TRUE),(int)(tdcount - i -1));
}
}
...
|
Solange im Sohn diese Variable nicht geändert oder zurückgegeben werden muss ist diese Lösung vollkommen ausreichend. Ansonsten muss man halt die shared memory-Geschichte in Kauf nehmen. Dieser Post wurde am 22.09.2003 um 16:31 Uhr von FloSoft editiert. |