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...
Ora i problemi sono 2: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; }
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...

Rispondi quotando