1. Przed pętlą, w której się forkujesz powinieneś zablokować sygnał SIGCHLD i odblokowujesz go dopiero po wyjściu z while, czekające na procesy, a ten while ma wyglądać w następujący spoób:
if(ifBack == 0){
while(chCounter){
sigsuspend(&mask);
}
}
gdzie ifBack oznacza czy działay w backgroundzie czy też nie.
2. Blokujące sycall mogą być przerywane sygnałami dlatego trzeba je wznowić.
3. Musisz napisać handler, mniej więcej tak:
void handler(int sig_nb){
//write(1, "jestem handler\n", 15);
pid_t ch = (pid_t)1;
int c;
//printf("%d\n",sig_nb);
int* stat;
while(ch > 0){
int *res;
ch = waitpid(-1, NULL, WNOHANG);
// printf("%d\n", ch);
if(ch > 0){
if(ifInForeground(ch))
chCounter--;
else{
sprawdz z jakim kodem się zakończył oraz dopisz do structury rezultatów wynik.
}
}
}
}
Ta struktura wyników ma mieć stały rozmiar i jeżeli już więcej danych się do niej nie zmieści to się nie musisz przejmować i nie dopisywać więcej.
4. Jeszcze coś z tym SIGINT'em trzeba zrobić i chyba zablokować go w mshellu a odblokować u dzieci, które są w foregroundzie. Plus dzieciom z backgroundu zakładasz nowy ród: setsid(), żeby sigint ich nie zabił
{"html5":"htmlmixed","css":"css","javascript":"javascript","php":"php","python":"python","ruby":"ruby","lua":"text\/x-lua","bash":"text\/x-sh","go":"go","c":"text\/x-csrc","cpp":"text\/x-c++src","diff":"diff","latex":"stex","sql":"sql","xml":"xml","apl":"apl","asterisk":"asterisk","c_loadrunner":"text\/x-csrc","c_mac":"text\/x-csrc","coffeescript":"text\/x-coffeescript","csharp":"text\/x-csharp","d":"d","ecmascript":"javascript","erlang":"erlang","groovy":"text\/x-groovy","haskell":"text\/x-haskell","haxe":"text\/x-haxe","html4strict":"htmlmixed","java":"text\/x-java","java5":"text\/x-java","jquery":"javascript","mirc":"mirc","mysql":"sql","ocaml":"text\/x-ocaml","pascal":"text\/x-pascal","perl":"perl","perl6":"perl","plsql":"sql","properties":"text\/x-properties","q":"text\/x-q","scala":"scala","scheme":"text\/x-scheme","tcl":"text\/x-tcl","vb":"text\/x-vb","verilog":"text\/x-verilog","yaml":"text\/x-yaml","z80":"text\/x-z80"}