A scopo didattico ho fatto un piccolo programmino che dovrebbe creare n(passato da linea di comando) figli che termineranno in momenti diversi, ognuno di questi un attimo prima di terminare stampa a schermo un messaggio, mentre il padre stampa a schermo un messaggio appena termina il primo dei processi figli... forse leggendo il codice risulta molto più semplice da capire...
codice:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <time.h>


int processoPadre();
int processoFiglio();


int main(int argc, char** argv)
    {
    int numFigli=atoi(argv[1]); //Numero figli da creare
    int pid;
    while(numFigli>0)
        {
        numFigli--;
        pid=(int)fork();
        
        if(pid==0)
            return processoFiglio();
        else if(pid<0)
            return -1;
        }    
    return processoPadre();
    }


int processoPadre()
    {
    int status;
    int cpid=(int)wait(&status); // Attendo il primo processo figlio che terminerà
    printf("processo figlio %d terminato con termination status %d.\n", cpid, status);
    fflush(stdout);
    return 0;
    }


int processoFiglio()    
    {
    srand(time(NULL));
    sleep(rand()%10);
    printf("Sono il processo %d, figlio di %d.\n", (int)getpid(), (int)getppid());
    fflush(stdout);
    return 0;
    }
Ora i problemi sono 2:
1- tutte le printf avvengono contemporaneamente solo al termine di tutti i figli invece di avvenire in momenti diversi...
2- Dopo la terminazione del processo padre i vari figli come ppid non dovrebbero restituire 1? come mai continuano a restituire il PID del processo creante?

E' un bel po' di tempo che non tocco questi argomenti, quindi sono un po' arrugginito...