Chiamate di sistema fork() e exec()

di il
18 risposte

18 Risposte - Pagina 2

  • Re: Chiamate di sistema fork() e exec()

    No è falsa c'ho la soluzione. Esegue D soltanto se exec fallisce quando PID == 0, quindi non è vero che non la esegue mai.
  • Re: Chiamate di sistema fork() e exec()

    
    pid = fork();
    if (pid > 0)
        codice-A;
    
    else if (pid == 0)
        exec("eseguibile-B");
    
    else
        codice-C;
    
    codice-D
    
    (a) Il processo Pc esegue sicuramente il codice-A e potrebbe eseguire il codice-D;
    (b) il processo Pc esegue sicuramente il codice-A e non esegue mai il codice-D;
    (c) il processo Pp esegue sicuramente il codice-A e potrebbe eseguire il codice-D;
    (d) il processo Pp esegue sicuramente il codice-A e non esegue mai il codice-D;
    (e) il processo Pc esegue sicuramente l’eseguibile-B e potrebbe eseguire il codice-D;
    (f) il processo Pc esegue sicuramente l’eseguibile-B e non esegue mai il codice-D;
    (g) il processo Pc potrebbe eseguire il codice-C e potrebbe eseguire il codice-D;
    (h) il processo Pc esegue sicuramente il codice-C e non esegue mai il codice-D;
    (i) il processo Pp esegue sicuramente l’eseguibile-B e potrebbe eseguire il codice-D;
    (j) il processo Pp esegue sicuramente l’eseguibile-B e non esegue mai il codice-D;
    (k) il processo Pp potrebbe eseguire il codice-C e potrebbe eseguire il codice-D;
    (l) il processo Pp potrebbe eseguire il codice-C e non esegue mai il codice-D;
    (m) nessuna delle affermazioni precedenti `e corretta.

    La risposta corretta sarebbe la m. Pc = child process, Pp = parent process.
  • Re: Chiamate di sistema fork() e exec()

    Sto mettendo in dubbio che nelle affermazioni (e) ed (f) non sia sempre vero che il figlio esegue sempre l'eseguibile-B
  • Re: Chiamate di sistema fork() e exec()

    Ti ho già postato come si usa la fork!
    in quel caso poco elegante avrai i seguenti risultati:
    Codice-A verrà sempre e solo eseguito dal padre.
    Exec eseguito solo ed esclusivamente dal processo figlio che andrà a sovrascrivere la memoria creata dal provesso padre e quindi non saprà piu tutto il resto del codice del padre, sempre che non incontra errori durante la exec e allora rimarrà dentro al processo figlio.
    Il codice-c verrà eseguito solo in caso di errore della fork
    Il codice D verrà eseguito dal padre dopo aver eseguito il codice A e dal figlio in caso incontri un errore nella funzione exec.
    Queste non sono supposizioni ma dati di fatto!
    Usa il codice che ti ho postato, la _exit dopo la exec va messo prorpio per non fare eseguire al figlio nient'altro in caso di errore.
    Una buona lettura su man fork man execv o ricerche su internet forse chiaruiranno ulteriori dubbi
Devi accedere o registrarti per scrivere nel forum
18 risposte