Creare più processi figli

di il
30 risposte

30 Risposte - Pagina 2

  • Re: Creare più processi figli

    Mettendo il wait fuori dal for quindi anche fuori dal processo padre logicamente fa eseguire prima il padre lo fa finire e poi tocca al figlio e fa cosi per ogni figlio che creo
    la sintassi pià corretta mi sembra questa
    
    for(i=0:i<numfigli;i++){
    fork pid[i];
    if(pid [i]==0){
    
    exit(0)
    }
    else{
    wait(&status);
    }
    
    il problema credo che deve stare nella pipe
  • Re: Creare più processi figli

    mettendo il wait fuori dal for quindi anche fuori dal processo padre
    Perchè dovrebbe essere fuori anche dal processo padre?
    Prova a vedere se questo può aiutarti vengono generati 10 processi figli tutti dentro un for poi finito il for di creazione viene richiamata (dal processo padre!) la wait(), una per ciascun figlio.
  • Re: Creare più processi figli

    Nell 'esempio che mi hai dato vedi che chiude l'else del padre
    
     } else { // pid <> 0 -> padre (il pid e' quello del figlio)
          printf("Ho generato il figlio %d con pid %d\n",i+1,pid);
        }
      }
    
      // Attende che dieci processi terminino
      for(i=0;i<NUMP;i++)
      {
      int status;
        wait(&status);		// Attende termine di un figlio (uno qualunque)
        printf("Terminato processo %d\n",WEXITSTATUS(status));
      }
    }
    
  • Re: Creare più processi figli

    che chiude l'else del padre
    sì ma ragazzo mio, il padre poi va avanti, non fa come il figlio che termina; quindi vengono subito eseguiti altri cicli e vengono creati altri figli e alla fine del for va ad aspettare ciascun figlio con wait()
  • Re: Creare più processi figli

    Ah si giusto quell'exit che ho messo! adesso però si blocca lo stesso e credo che l'errore stia nella pipe.
    Però scusami c'è un altra cosa che non mi è chiara.Se metto il wait fuori dall'else del padre mi fa tutto il processo del padre senza aspettare il figlio, e non è quello che voglio io
  • Re: Creare più processi figli

    Però scusami c'è un altra cosa che non mi è chiara.Se metto il wait fuori dall'else del padre mi fa tutto il processo del padre senza aspettare il figlio, e non è quello che voglio io
    Che senso ha un padre che fa un figlio e lo aspetta? Tanto vale che faccia direttamente lui il lavoro! Un processo "proletario" fa i figli perchè questi svolgano autonomamente un compito.
    Ma a cosa ti serve la pipe?
  • Re: Creare più processi figli

    Se io voglo far scrivere qlks al figlio e il padre lo deve leggere devo per forza aspettare che il figlio scriva no?
  • Re: Creare più processi figli

    se io voglo far scrivere qlks al figlio e il padre lo deve leggere devo per forza aspettare che il figlio scriva no?
    Le pipe dovrebbero lavorare in maniera non bloccante tramite un buffer interno e quindi teoricamente al figlio dovrebbe bastare scrivere e poi il padre dovrebbe poter leggere tranquillamente tutti i risultati assieme.
    Cioè, crei una pipe per ciascun processo figlio che creerai; ciascun processo figlio scrive nella relativa pipe quel che ha da scrivere; alla fine il padre legge da tutte le pipe e aspetta che i processi terminino con wait().
  • Re: Creare più processi figli

    E come faccio a dire a un figlio tu usa questa pipe e ad un altro usa quest'altra pipe?
  • Re: Creare più processi figli

    Ciascuno ha il suo indice (il for a qualcosa servirà )
  • Re: Creare più processi figli

    Certo che mi perdo in un niente XD grazie tante per l'aiuto che mi stai dando comunque basterebbe fare un controllo sulla i giusto?
  • Re: Creare più processi figli

    Sì, secondo me la cosa più semplice (che poi puoi eventualmente evolvere) è di avere due pipe
    int pipe_0[2];
    int pipe_1[2];
    e nel for, in corrispondenza del processo figlio (copio da http://pubs.opengroup.org/onlinepubs/9699919799/functions/pipe.html)
    if(i==0)
    {
        close(pipe_0[0]);                       /* Read end is unused */
        write(pipe_0[1], "Hello world 0\n", 14);  /* Write data on pipe */
        close(pipe_0[1]);                       /* EOF */
        exit(EXIT_SUCCESS);
    }
    else
    {
        close(pipe_1[0]);                       /* Read end is unused */
        write(pipe_1[1], "Hello world 1\n", 14);  /* Write data on pipe */
        close(pipe_1[1]);                       /* EOF */
        exit(EXIT_SUCCESS);
    }
    
  • Re: Creare più processi figli

    Ho provato a fare con due pipe ma si blocca lo stesso ! mannaccia non riesco proprio a venirne a capo
  • Re: Creare più processi figli

    Fai cose semplici.
    Parti da un esempio con un solo processo figlio che scrive "Hello world" e il padre che legge quel che gli ha scritto il figlio.
    Poi ci aggiungi il secondo figlio e vedi cosa succede. Buon lavoro
  • Re: Creare più processi figli

    Va bene grazie per tutto! ti terrò aggiornato
    avevo dimenticato di chiudere la pipe! adesso mi da un errore "bad file descriptor" continua la mia analisi XD
Devi accedere o registrarti per scrivere nel forum
30 risposte