2017-06-25 1 views
1

J'ai le morceau de code suivant:Pourquoi le processus enfant n'est pas exécuté?

int main() { 
    int n = 1; 
    if(fork() == 0) { 
     printf("child"); 
     n = n + 1; 
     exit(0); 
    } 
    n = n + 2; 
    printf("%d: %d\n", getpid(), n); 
    wait(0); 
    return 0; 
} 

Le problème est que je ne comprends pas pourquoi le processus de l'enfant ne soit pas en cours d'exécution.

Le processus enfant exécute seulement si je mets sleep(1) dans le processus parent

Merci à l'avance.

+0

Comment le savez-vous? L'enfant ne fait rien (observable). – tkausl

+0

@tkausl, j'insère une commande printf dans le processus fils..voir la réponse mise à jour. –

Répondre

2

est est exécuté et il doit être en sortie le texte. Aucun retour à la ligne ne devrait être nécessaire:

https://ideone.com/a1tznH

#include <stdio.h> 
#include <unistd.h> 
#include <sys/wait.h> 

int main() { 
    int n = 1; 
    if(fork() == 0) { 
     printf("child"); 
     n = n + 1; 
     exit(0); 
    } 
    n = n + 2; 
    printf("%ld: %d\n", (long)getpid(), n); //this is how you should print pids 
    wait(0); 
    return 0; 
} 

sortie Exemple:

child23891: 3 

Peut-être que vous n'avez pas remarqué le texte de l'enfant était au début de votre prochaine invite:

18188: 3 
child[21:17] [email protected]: $ 
+1

Merci pour votre réponse. –

+0

Le programme renvoie 3 car le processus parent n'a pas reçu la valeur enfant, n'est-ce pas? –

+0

Cela peut être accompli en utilisant la communication pipe ou fifo. –

1

L'enfant est exécuté mais deux processus tentent d'écrire sur le même FD-STDOUT (descripteur de fichier).

Si vous voulez voir le résultat, mettez "\ n" dans printf de l'enfant.

int main() { 
    int n = 1; 

    if(fork() == 0) 
    { 
    printf("child\n"); 
    n = n + 1; 
    exit(0); 
    } 
    n = n + 2; 
    printf("%d: %d\n", getpid(), n); 
    wait(0); 
    return 0; 
} 
+0

C'est mon erreur! Merci beaucoup. –

0

Essayez

pid_t pid; 
pid = fork(); 

if(pid < 0) 
{ 
    printf("fail to fork"); 
} 
else if (pid == 0) 
{ 
    printf("running child"); 
    exit(0); 
} 
else 
{ 
    print("running parent"); 
    wait(0); 
    print("child done"); 
} 

return 0; 

Ceci est la structure de base d'un programme que j'ai écrit récemment qui fonctionne. Pas tout à fait sûr pourquoi la tienne ne fonctionnait pas bien.