ne ho fatto uno utilizzando 5 processi paralleli, dove in ogni processo creato stampo di volta in volta sono il padre, il mio pid è...sono il figlio ecc...fino ai nipoti...
il codice è questo e funziona...
Codice: Seleziona tutto
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main(void){
pid_t pid;
printf("\nSono il padre.Il mio PID e' %d\n", getpid());
switch(pid=fork()){
case -1:
printf("errore nella fork");
break;
case 0:
sleep(2);
printf("\nsono il primo figlio. il mio PID e' %d. il PPID di mio padre e' %d.Adesso faccio un figlio anche io\n", getpid(), getppid());
sleep(10);
switch(pid=fork()){
case -1:
printf("errore nella fork");
break;
case 0:
sleep(2);
printf("\nsono il secondo nipote. il mio PID e' %d. il PPID di mio padre e' %d.\n", getpid(), getppid());
break;
default:
sleep(4);
printf("\nSono il primo figlio(%d).Ora esco.\n", getpid());
_exit(0);
}
break;
default:
sleep(4);
printf("\nsono il padre(%d).Ho gia partorito 1 figlio e ora faccio il secondo.\n\n", getpid());
switch(pid=fork()){
case -1:
printf("errore nella fork");
break;
case 0:
sleep(2);
printf("\nsono il secondo figlio. il mio PID e' %d. il PPID di mio padre e' %d.Adesso faccio un figlio anche io\n", getpid(), getppid());
switch(pid=fork()){
case -1:
printf("errore nella fork");
break;
case 0:
sleep(4);
printf("\nsono il primo nipote. il mio PID e' %d. il PPID di mio padre e' %d.\n", getpid(), getppid());
break;
default:
sleep(6);
printf("\nSono il secondo figlio(%d).Ora esco.\n", getpid());
_exit(0);
}
break;
default:
sleep(4);
printf("\nsono il padre(%d).Ho partorito 1 altro figlio e ora sono stufo.\n\n", getpid());
sleep(12);
}
_exit(0);
}
}Codice: Seleziona tutto
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main(void){
pid_t pid;
printf("\nSono il padre.Il mio PID e' %d\n", getpid());
switch(pid=fork()){
case -1:
printf("errore nella fork");
break;
case 0:
sleep(2);
printf("\nsono il primo figlio. il mio PID e' %d. il PPID di mio padre e' %d.Adesso faccio un figlio anche io\n", getpid(), getppid());
sleep(10);
switch(pid=fork()){
case -1:
printf("errore nella fork");
break;
case 0:
sleep(6);
printf("\nsono il secondo nipote. il mio PID e' %d. il PPID di mio padre e' %d.\n", getpid(), getppid());
break;
default:
sleep(8);
printf("\nSono il primo figlio(%d).Ora esco.\n", getpid());
_exit(0);
}
break;
default:
sleep(4);
printf("\nsono il padre(%d).Ho gia partorito 1 figlio e ora faccio il secondo.\n\n", getpid());
switch(pid=fork()){
case -1:
printf("errore nella fork");
break;
case 0:
sleep(2);
printf("\nsono il secondo figlio. il mio PID e' %d. il PPID di mio padre e' %d.Adesso faccio un figlio anche io\n", getpid(), getppid());
switch(pid=fork()){
case -1:
printf("errore nella fork");
break;
case 0:
sleep(4);
printf("\nsono il primo nipote. il mio PID e' %d. il PPID di mio padre e' %d.\n", getpid(), getppid());
switch(pid=fork()){
case -1:
printf("errore nella fork");
break;
case 0:
sleep(2);
printf("\nsono il primo pronipote.il mio PID e' %d. il PPID di mio padre e' %d.", getpid(), getppid());
break;
default:
sleep(4);
printf("\nsono il primo nipote(%d). Ora esco", getpid());
_exit(0);
}
break;
default:
sleep(10);
printf("\nSono il secondo figlio(%d).Ora esco.\n", getpid());
_exit(0);
}
break;
default:
sleep(4);
printf("\nsono il padre(%d).Ho partorito 1 altro figlio e ora sono stufo.\n\n", getpid());
sleep(12);
}
_exit(0);
}
}