1. Czy to MUSZĄ być procesy? Takie rzeczy lepiej robi się na wątkach (thread), mogą one bowiem współdzielić dane.
2. Po wykonaniu funkcji "fork()" pojawiają się 2 identyczne działające programy: jeden jako rezultat fork() dostaje 0, to jest program potomny, drugi jako rezultat dostaje <>0, to jest oryginalny proces a wartość fork to PID potomka.
3. W sumie nie musisz robić exec...(), po prostu wykrywasz wartość zwracaną przez fork(). Jeżeli ==0, to skaczesz do obliczeń, w przeciwnym wypadku kontynuujesz zarządzanie.
4. Do komunikacji między procesami w "szkolnych" zadaniach używa się potoków nienazwanych. Tworzysz je funkcją int pipe(int handle[2]). Odpalasz pipe() przed fork(). U rodzica zamykasz koniec do czytania, u potomka do pisania i masz kanał rodzic->potomek. Jeżeli zrobisz 2-gi pipe i zamkniesz na odwrót, to masz kanał potomek->rodzic. Robiąc parę potoków dla każdego potomka masz kontakt z każdym z nich do dawania poleceń i odbierania wyników.