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...