Ultima modifica:
Buona sera,
Ho delle difficoltà riguardo questo programma.
Non riesco a capire perché quando eseguo mi stampa prima il terzo figlio e poi il resto nel giusto modo,e soprattutto perché alla stampa dei pid figli mi escono altri numeri.
Grazio tutte le persone per l'interessamento e il tempo dedicatomi.
Ps. Scusate per la mancata indentation.
Aggiornamento: problema risolto e funzionante.
Ho delle difficoltà riguardo questo programma.
Non riesco a capire perché quando eseguo mi stampa prima il terzo figlio e poi il resto nel giusto modo,e soprattutto perché alla stampa dei pid figli mi escono altri numeri.
Grazio tutte le persone per l'interessamento e il tempo dedicatomi.
Ps. Scusate per la mancata indentation.
- [HASHTAG]#include[/HASHTAG] <stdlib.h>
- [HASHTAG]#include[/HASHTAG] <stdio.h>
- [HASHTAG]#include[/HASHTAG] <unistd.h>
- [HASHTAG]#include[/HASHTAG] <sys/wait.h>
- int main(){
- int pid_1,pid_2,pid_3;
- pid_1=fork();
- int p1=0,p2=0,p3=0;
- if(pid_1 < 0){
- printf("Creazione fallita\n");
- exit(-1);
- }else if(pid_1 == 0){
- printf("Pid primo figlio %d\n",getpid());
- printf("La differenza e' %d\n",getpid()-getppid());
- p1=getpid();
- exit(0);
- }
- else if(pid_1>0){
- wait(NULL);
- pid_2=fork();
- if(pid_2 <0){
- printf("errore\n");
- exit(0);
- }else if(pid_2 == 0){
- p2=getpid();
- execlp("/bin/echo","echo","\nsono il secondo figlio",NULL);
- exit(0);
- }else if(pid_2>0){
- wait(NULL);
- pid_3 = fork();
- if(pid_3<0){
- printf("Errore\n");
- exit(0);
- }else if (pid_3 == 0){
- printf("Pid terzo figlio %d\n",getpid());
- execlp("/bin/ls","ls",NULL);
- p3=getpid();
- exit(0);
- }else{
- wait(NULL);
- printf("Pid padre %d\n",getppid());
- printf("I figli sono %d %d %d\n",pid_1,pid_2,pid_3);
- exit(0);
- }
- }
- }
- return 0;
- }
Aggiornamento: problema risolto e funzionante.