Premetto che sono un principinante di C!
Ho un problema nell'utilizzo della wait().
Credo che la cosa sia dovuta al fatto che mi sfugge qualcosa sul comportamento della wait... ...ma non capisco cosa.
L'esercizio che devo fare richiede quanto segue:
1) Vi è un processo padre che crea un figlio con la fork()
2) Il padre si mette in attesa del figlio tramite wait()
3) Il figlio termina
4) Il padre prosegue e crea un altro figlio con la fork
5) Il padre invoca un'altra wait per attendere le fine di questo figlio.
Ora vi riporto il mio codice che non riesco a capire perchè, non effettua l'attesa sul secondo figlio. Il programma è semplicissimo e oltre a creare i figli come detto sopra, fa solo delle stampe a video. (ho messo anche dei commentini per farvi sbattere il meno possibile)
- Codice: Seleziona tutto
#include <signal.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
int id; //variabili di servizio usate solo per recuperare
int id1;//gli ID dei processi per distinguere padre da iglio.
id=fork();
if(id == 0) //codice eseguido dal primo figlio.
{
id1=getpid();
printf("ID= %d - Io sono il primo figlio!\n", id1);
sleep(3);
printf("Primo figlio terminato\n");
exit(0); //Qui termina il primo figlio
}
/*Codice eseguito solo dal padre*/
id1=getpid(); //restituisce il proces id di chi lo invoca
printf("ID= %d - Io sono il padre!\n", id1);
printf("Attendo la fine del primo figlio!\n");
wait(); //mette in attesa della fine di un figlio.
id=fork();
if(id == 0) //codice eseguido dal secondo figlio.
{
id1=getpid();
printf("ID= %d - Io sono il secondo figlio!\n", id1);
sleep(3);
printf("Secondo figlio terminato\n");
exit(0); //Qui termina il secondo figlio
}
/*Codice eseguito solo dal padre*/
printf("ID= %d - Io sono il padre!\n", id1);
printf("Attendo la fine del secondo figlio!\n");
wait(); //mette in attesa della fine di un figlio.
printf("Padre terminato, Fine dell'esercizio!\n");
exit(0);
}
Se provate a farlo girare avrete che:
1) Parte il padre e parte il primo figlio
2) Il padre attende il primo figlio
3) Il primo figlio termina
4) Parte il secondo figlio
5) Termina il padre
6) Passati i 3 secondi della sleep termina il secondo figlio.
Vi prego aiutatemi! Non capisco perchè il padre non aspetta il secondo filglio!!!
Se vi serve ho anche il codice (non fatto da me) che funziona correttamente, ma io non riesco a capire perchè il mio non funziona!!!