Sto imparando ad utilizzare la funzione fork() perciò ho fatto un semplice programmino, in breve fa questo:
1-prende un valore qt da linea di comando
2-crea qt processi figli stampando una frase che mostra a video la loro effettiva creazione
3-per ogni figlio creato viene salvato il PID in un array
4-stampa l'elenco dei figli creati
Codice PHP:
int sezionePadre(int figli[], int nFiglioint pid//funziona eseguita dal processo padre per qt volte
        
{
        
printf(" "); // ********
        
figli[nFiglio]=pid;
        return 
0;
        }

int sezioneFiglio() //funzione eseguita solo dai figli
        
{
        
printf("Sono %d, il figlio di %d\n", (int)getpid(), (int)getppid());
        return 
0;
        }

int main(int argcchar** argv)
        {
        
int qt=atoi(argv[1]); //numero di figli da creare
        
int i;
        
int figli[qt]; //array che conterrà i PID dei figli creati
        
int pid;
        
int ret=1//valore che ritornerà alla fine del processo padre
        
for(i=0i<qti++)
                {
                
pid=(int)fork();
                if(
pid==0) return sezioneFiglio();
                else if(
pid>0ret sezionePadre(figliipid);
                else 
printf("Errore\n");
                }
        if(
ret!=0) return ret;
 
        for(
i=0i<qti++) wait(); // attende la fine di tutti i qt processi figli

        // Stampa l'elenco dei figli
        
printf("Sono %d, il padre di ", (int)getpid());
        for(
i=0i<qti++)
                
printf("%d "figli[i]);
        
printf("\n");

        return 
ret;
        } 
Ora il programma funziona correttamente tranne per la stampa finale dei figli, infatti il primo figlio risulta sempre avere PID=0, il tutto si corregge mettendo un semplice printf(" ") in sezionePadre come quello che ho inserito con il commento // ********

si corregge anche con uno sleep(1), insomma mi basta ritardare un minimo la funzione sezionePadre, ma come mai succede questo?