Visualizzazione dei risultati da 1 a 5 su 5

Discussione: [C] Funzione fork()

  1. #1
    Utente di HTML.it L'avatar di Poker1
    Registrato dal
    Jul 2002
    Messaggi
    479

    [C] Funzione fork()

    Ciao a tutti!!!
    Sono veramente alle prime armi con la programmazione concorrente e mi e' venuto subito un dubbio

    Io ho sempre visto chiamate singole a fork, del tipo:

    codice:
    pid = fork();
    Adesso mi trovo a fare un esercizio dove mi dice di "forkare" 6 processi chiamati pid1, pid2...pid6. Da quel che capisco devo proprio creare 6 variabili intere e fare 6 fork giusto?

    Altra cosa, dopo averli create mi dice di specializzare il primo in sleep ( tramite execXX ). Ora la prassi come e'? Nel senso che, io faccio una prima fork e poi specializzo subito?

    codice:
    pid1 = for();
    exec(....)
    oppure prima faccio tutte e 6 le fork e poi inizio a specializzarli?

    Grazie delle delucidazioni :P
    Non riscrivere la ruota, usa le librerie.
    by Bjarne Stroustrup
    EIDON SOFT MEMBER

  2. #2
    Utente di HTML.it L'avatar di ibykos
    Registrato dal
    Feb 2005
    Messaggi
    201
    Non conosci bene la fork()?
    codice:
    man fork
    Di solito si usa il valore di ritorno per fare un lavoro come quello che ti hanno chiesto:

    codice:
    pid_t process
    
    for (i=0;i<6;i++){
      if ((process=fork())>0) //la fork restituisce chld_pid al padre
        continue; //il padre forca 6 volte
      else{ //la fork restituisce 0 al figlio
        switch (i){
           case 1:
             execve("path_processo1");
             break;
           case 2:
           /*eccetera eccetera*/
           default:
             fprintf (stderr,"(%s) error - i out of range\n",argv[0]);
             break;
        }
      }
    }
    saluti

  3. #3
    Utente di HTML.it L'avatar di Poker1
    Registrato dal
    Jul 2002
    Messaggi
    479
    Ma quindi, il pid restituito dalla fork in se per se e' significativo solo rispetto allo 0?
    Nel senso che, a me serve controllare il pid nel momento specifico e vedere se vale 0 o qualcos'altro?
    Visto che il for sovrascrive ogni volta il valore di pid..anche se questo lo perdo per la sovrascrittura..non cambia niente?
    Non riesco ad entrare nell'ottica di questa cosa..
    Non riscrivere la ruota, usa le librerie.
    by Bjarne Stroustrup
    EIDON SOFT MEMBER

  4. #4
    Utente di HTML.it L'avatar di ibykos
    Registrato dal
    Feb 2005
    Messaggi
    201
    Il pid restituito dalla fork serve essenzialmente a distinguere il padre dai figli.
    Se devi fare comunicare il padre con i figli ti conviene salvare i pid restituiti dalla fork in un vettore.
    I figli hanno meno problemi, perché hanno due ottime funzioni per conoscere la propria identità e quella del padre:

    codice:
    pid_t getpid(); //restituisce il pid del processo chiamante
    pid_t getppid(); //restituisce il pid del padre del chiamante

  5. #5
    Utente di HTML.it L'avatar di Poker1
    Registrato dal
    Jul 2002
    Messaggi
    479
    Adesso risulta piu chiaro. Non avendo mai fatto questo tipo di programmazione mi trovo spiazzato. Apro un altro post per chiedere una info sui thread, altrimenti qua vado OT
    Non riscrivere la ruota, usa le librerie.
    by Bjarne Stroustrup
    EIDON SOFT MEMBER

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.