Chiamate di sistema fork() e exec()

di il
18 risposte

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
Perchè l'affermazione il processo figlio col PID == 0 esegue sempre l'eseguibile B e non esegue mai il codice D è falsa?? Non dovrebbe essere vera?

18 Risposte

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

    Se ho capito cosa intendi, il codice-D si trova all'esterno della struttura else, quindi viene SEMPRE eseguito
  • Re: Chiamate di sistema fork() e exec()

    Quindi con la syscall exec() sostituisco l'immagine del processo chiamante ma non terminandolo.
  • Re: Chiamate di sistema fork() e exec()

    tuixte ha scritto:


    Se ho capito cosa intendi, il codice-D si trova all'esterno della struttura else, quindi viene SEMPRE eseguito
    Anche a me non torna!
    exec sostituisce il processo, quindi esegue l'eseguibile-B e non arriva mai al codice-D.
  • Re: Chiamate di sistema fork() e exec()

    In realtà potrebbe eseguire il codice D nel caso in cui exec fallisca. Penso che considerando questo caso l'affermazione risulta falsa.
  • Re: Chiamate di sistema fork() e exec()

    C'è qualcosa che non torna. Ho provato ad eseguire questo codice:
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    int main(){
        pid_t pid;
        pid = fork();
            if (pid > 0)
               printf("codice-A\n");
            else if (pid == 0)
               execl("echo", "ECHO", " codice-B", NULL);
            else
                printf("codice-C\n");
            printf("codice-D\n");
    
       return 0;
    }
    
    OUTPUT:
    codice-A
    codice-D
    codice-D
  • Re: Chiamate di sistema fork() e exec()

    Rispondo qui oppure in questo

    http://forum.html.it/forum/showthread.php?threadid=2921354

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

    Oregon dove vuoi. Perchè ritorna due volte codice-D? A quanto pare esegue sia il ramo con pid>0 che con pid==0.
  • Re: Chiamate di sistema fork() e exec()

    
      pid = fork();
        if (pid == 0){
           //sono il figlio
           exec("eseguibile-B");
           //questa riga di codice non verrà mai eseguita almeno che exec non ritorni errore
           puts("errore);
           _exit(1);
        }
        else if (pid == -1)
        {
             puts("errore fork");
             _exit(1);
        }
        
        //qui esegue il codice del padre ovvero dove continua il processo che ha invocato la fork
    
    Il crossposting è una tecnica irrispettosa nei confronti di chi ti aiuta GRATUITAMENTE.
  • Re: Chiamate di sistema fork() e exec()

    Chiedo scusa ma non volevo mancare di rispetto a nessuno. La prossima volta eviterò.
  • Re: Chiamate di sistema fork() e exec()

    Sicuri che questa

    execl("echo", "ECHO", " codice-B", NULL);

    non sia sbagliata e quindi il processo continui con la sezione-D?
  • Re: Chiamate di sistema fork() e exec()

    Penso sia corretta, perchè che cosa sbaglio?
  • Re: Chiamate di sistema fork() e exec()

    Forse volevi scrivere

    "/bin/echo"
  • Re: Chiamate di sistema fork() e exec()

    Hai ragione, scusatemi per lo stupido errore.
  • Re: Chiamate di sistema fork() e exec()

    Perchè l'affermazione:
    il processo figlio col PID == 0 esegue sempre l'eseguibile B e non esegue mai il codice D è falsa??
    Tornando al quesito iniziale è vera. Giusto? Cioè il figlio esegue B e mai D.
Devi accedere o registrarti per scrivere nel forum
18 risposte