- Esempio di utilizzo di fork() per creare processi figli -
 
COSA SERVE PER QUESTO TUTORIAL
Download | Chiedi sul FORUM | Glossario Un compilatore C, conoscenze basiche di C (in particolare allocazione dinamica di array).
Come creare un numero non noto a compilazione di processi figli tramite fork()

CODICE SORGENTE
#include <stdio.h>       /* printf() */
#include <unistd.h>      /* fork(), getpid() */
#include <stdlib.h>      /* malloc(), exit() */
#include <sys/types.h>   /* pid_t */
#include <sys/wait.h>    /* wait() */

int main(int argc, char *argv[]) {
    int n, c1, res;
    pid_t *figli, corrente;
    
    /* 
     * Chiediamo all'utente quanti processi
     * vuole forkare.
     */
    printf("Quanti processi vuoi creare? ");
    scanf("%d", &n);

    /*
     * Allochiamo dinamicamente lo spazio necessario
     * per contenere gli ID dei processi che creeremo
     */
    figli = malloc(sizeof(int)*n);

    /*
     * Forkiamo n volte nel processo padre e facciamo
     * terminare il ciclo subito se si tratta del figlio
     * (ovvero se il risultato dell'ultima fork e' 0)
     */
    for(c1=0;c1<n && (c1==0 || figli[c1-1]!=0);c1++)
        figli[c1] = fork();
    
    /*
     * Prendiamo l'ID del processo corrente
     */
    corrente = getpid();
    if(figli[c1-1]!=0) {
        /*
         * Il padre attende la terminazione dei figli
         */
        printf("Padre (%d) - Attendo la terminazione di tutti i figli.\n", corrente);
        wait(&res);
        printf("Padre (%d) - Tutti i figli sono terminati.\n", corrente);
    } else {
        /*
         * I figli stampano un messaggio notificando la
         * propria esecuzione
         */
        printf("Figlio (%d) - Sono in esecuzione.\n", corrente);
        /*
         * Il figlio termina con esito positivo
         */
        exit(0);
    }

    return 0;
}
<< INDIETRO by VeNoM00